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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python11 079
  • Облачные технологии8 824
  • QA вакансии2 977
  • Android1 395
  • Инженер данных1 032
  • Продакт-менеджер351

Разработка

  • Backend вакансии1 342
  • iOS1 307
  • AI вакансии660
  • Fullstack вакансии524
  • Frontend вакансии465
  • Mobile вакансии28

По стеку

  • Go6 622
  • Java3 670
  • Kotlin1 199
  • Node.js1 190
  • Rust1 181
  • .NET780
  • PHP329
  • C++301
  • C#211

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

  • Kubernetes5 251
  • Linux-инфраструктура4 138
  • DevOps вакансии3 024
  • Terraform / IaC2 834
  • Мониторинг и Observability1 406
  • CI/CD917
  • SRE389
  • Кибербезопасность40

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

  • Аналитик данных586
  • Бизнес-аналитик487
  • Data Scientist458
  • Системный аналитик75

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

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

По регионам

  • Вакансии в США31 201
  • Вакансии в Европе11 507
  • Работа в России3 630
  • Вакансии в Канаде2 546

По формату

  • Удалённые вакансии47 761
  • Релокация в США31 201
  • Гибридная работа7 699
  • Офисная работа6 071

По уровню

  • Senior вакансии27 027
  • Middle вакансии12 284
  • Junior вакансии4 495

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

Все компании
  • Wise196 вакансий
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify38 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • 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 / Lead PHP Engineer with AI skills (#5887)
  • Senior/ Lead PHP Engineer (with AI Skills) (#5828)
  • Senior Web Application Engineer, J.League Online Store - EC Expansion Development Department (ECEXD)
  • DX Solution Lead Engineer - Backoffice Business Support Section, Business Support Development Department (BSD)
  • Product Manager, Customer Strategy Department - Platform Strategy Supervisory Department (PFSD)

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

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