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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python16 845
  • Облачные технологии13 724
  • QA вакансии3 439
  • Backend вакансии2 083
  • Инженер данных1 763
  • Продакт-менеджер1 196

Разработка

  • Android1 842
  • iOS1 687
  • Fullstack вакансии958
  • AI вакансии949
  • Frontend вакансии735
  • Mobile вакансии44

По стеку

  • Go8 619
  • Java6 379
  • Node.js1 971
  • .NET1 640
  • Kotlin1 599
  • Rust1 443
  • PHP670
  • C#650
  • C++536

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

  • Kubernetes7 591
  • DevOps вакансии5 865
  • Linux-инфраструктура5 413
  • Terraform / IaC4 162
  • CI/CD2 991
  • Мониторинг и Observability1 752
  • SRE558
  • Кибербезопасность424

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

  • Data Scientist1 087
  • Бизнес-аналитик910
  • Аналитик данных849
  • Системный аналитик148

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

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

По регионам

  • Вакансии в США45 355
  • Вакансии в Европе22 646
  • Вакансии в Канаде4 483
  • Работа в России3 902

По формату

  • Удалённые вакансии75 369
  • Релокация в США45 353
  • Гибридная работа12 002
  • Офисная работа7 033

По уровню

  • Senior вакансии42 326
  • Middle вакансии20 996
  • Junior вакансии6 757

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

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab139 вакансий
  • Celonis40 вакансий
  • 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 вакансии
  • Senior Full-Stack Engineer (NestJS and React) (#6021)
  • Lead QA Specialist - Supremacy: World War 3
  • Product Engineer / Product Builder - Backend or Full-stack
  • Lead System Engineer
  • Magento Backend Developer

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

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