Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 987новых вакансий за сутки·91 463вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 238
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python16 417
  • Облачные технологии13 174
  • QA вакансии3 434
  • Backend вакансии2 036
  • Инженер данных1 672
  • Продакт-менеджер1 168

Разработка

  • Android1 816
  • iOS1 666
  • AI вакансии937
  • Fullstack вакансии892
  • Frontend вакансии717
  • Mobile вакансии38

По стеку

  • Go8 561
  • Java6 090
  • Node.js1 889
  • Kotlin1 554
  • .NET1 545
  • Rust1 432
  • PHP640
  • C#562
  • C++498

DevOps и инфраструктура

  • Kubernetes7 303
  • DevOps вакансии5 594
  • Linux-инфраструктура5 291
  • Terraform / IaC4 014
  • CI/CD2 557
  • Мониторинг и Observability1 735
  • SRE548
  • Кибербезопасность403

Аналитика и данные

  • Data Scientist1 037
  • Бизнес-аналитик868
  • Аналитик данных830
  • Системный аналитик134

Другие направления

  • Проджект-менеджер529
  • UI/UX дизайн129
  • Ручное тестирование14

По регионам

  • Вакансии в США44 925
  • Вакансии в Европе21 347
  • Вакансии в Канаде4 453
  • Работа в России3 876

По формату

  • Удалённые вакансии74 108
  • Релокация в США44 925
  • Гибридная работа11 411
  • Офисная работа6 957

По уровню

  • Senior вакансии41 290
  • Middle вакансии20 424
  • Junior вакансии6 654

Сейчас нанимают

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab136 вакансий
  • Celonis45 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме PHPВсе вопросы
PHPMiddleТеория

Что такое readonly properties и классы в PHP 8.1/8.2?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Readonly properties (PHP 8.1) можно инициализировать один раз; повторная запись вызывает Error. Readonly classes (PHP 8.2) делают все свойства readonly автоматически, обеспечивая иммутабельные объекты.

Readonly properties (PHP 8.1)

Свойство с модификатором readonly можно присвоить ровно один раз — обычно в конструкторе. Любая последующая запись бросает Error: Cannot modify readonly property.

<?php

class Money
{
    public readonly int $amount;
    public readonly string $currency;

    public function __construct(int $amount, string $currency)
    {
        if ($amount < 0) {
            throw new InvalidArgumentException('Amount cannot be negative');
        }
        $this->amount   = $amount;
        $this->currency = strtoupper($currency);
    }
}

$price = new Money(1000, 'usd');
echo $price->amount;   // 1000
echo $price->currency; // USD

// $price->amount = 2000; // Error: Cannot modify readonly property Money::$amount

Constructor property promotion + readonly

<?php

class UserCreatedEvent
{
    public function __construct(
        public readonly int    $userId,
        public readonly string $email,
        public readonly \DateTimeImmutable $occurredAt = new \DateTimeImmutable(),
    ) {}
}

$event = new UserCreatedEvent(userId: 42, email: 'alice@example.com');
echo $event->userId; // 42

Readonly classes (PHP 8.2)

Ключевое слово readonly перед class делает все объявленные свойства readonly автоматически. Нельзя добавлять нетипизированные свойства и динамические свойства.

<?php

readonly class Point
{
    public function __construct(
        public float $x,
        public float $y,
        public float $z = 0.0,
    ) {}

    // Иммутабельный «вither»
    public function withX(float $x): static
    {
        return new static($x, $this->y, $this->z);
    }
}

$p1 = new Point(1.0, 2.0);
$p2 = $p1->withX(5.0);

echo $p1->x; // 1.0 — неизменён
echo $p2->x; // 5.0 — новый объект

Клонирование readonly объектов (PHP 8.3)

В PHP 8.3 clone with позволяет создавать изменённую копию readonly-объекта:

<?php

$p3 = clone $p1 with { x: 9.0 };
echo $p3->x; // 9.0
echo $p3->y; // 2.0 — скопировано

Ограничения

  • Readonly свойства должны иметь явный тип — public readonly $x вызывает синтаксическую ошибку.
  • Нельзя использовать unset() для readonly свойства после инициализации.
  • Readonly class не может содержать статические свойства.
  • Дочерний класс readonly class тоже должен быть объявлен readonly.

Подводные камни

  • Попытка десериализации (unserialize) readonly-объекта: __unserialize() пытается записать в свойства после конструктора — нужен явный __unserialize через reflection или специальный обходной путь.
  • Тестирование: создать mock или stub с readonly-свойствами через PHPUnit невозможно стандартными методами; нужны фабрики или клонирование.
  • Гидрация из БД (Doctrine/Eloquent): ORM создаёт объект без конструктора и присваивает свойства напрямую через Reflection — это работает до инициализации, но нарушает семантику readonly при повторной гидрации.
  • Readonly class нельзя использовать как mutable DTO: при изменении одного поля придётся пересоздавать весь объект.
  • Статические анализаторы (PHPStan/Psalm) могут ложно сообщать об ошибках при использовании readonly с Reflection API.

Типичные ошибки

  • Сводить readonly properties classes к названию метода без lifecycle и failure path.
  • Игнорировать модель runtime: интерпретируемый runtime PHP 8.x, обычно запускаемый как отдельный запрос в FPM, CLI или worker-процессе.
  • Не отделять validation, authorization, transaction boundary и business logic.

Что проверяет интервьюер

  • Объясняет readonly properties classes через конкретную точку lifecycle в PHP.
  • Приводит корректный минимальный пример без вымышленных методов или callbacks.
  • Называет edge cases: пустые значения, ошибки, транзакции, безопасность или concurrency.

Как вы знаете этот вопрос?

Проверить себя по теме PHP →

Источники

  • https://www.php.net/manual/en/language.oop5.properties.php
  • https://www.php.net/manual/en/
←Предыдущий вопросЧто такое type juggling в PHP и каковы его последствия для безопасности?Следующий вопрос→Что такое prepared statements и как использовать PDO?

Связанные темы

PHPBackend-Engineeringphp-ecosystem

Вакансии с этим навыком

PHP вакансии
  • PHP разработчик
  • DevOps Engineer
  • Senior / Lead PHP Engineer with AI skills (#5887)
  • Senior/ Lead PHP Engineer (with AI Skills) (#5828)
  • SRE/DevOps Engineer

Частые вопросы на собеседовании

  • Как предотвратить SQL injection в PHP?
  • Что такое PHP traits и чем они отличаются от интерфейсов и абстрактных классов?
  • Каковы основные возможности PHP 8.x (named arguments, match expression, nullsafe operator, fibers)?
  • Что такое суперглобальные переменные (superglobals) в PHP? Назовите наиболее распространённые.