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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python11 001
  • Облачные технологии7 882
  • QA вакансии2 530
  • Android1 457
  • Инженер данных929
  • Продакт-менеджер312

Разработка

  • iOS1 361
  • Backend вакансии1 335
  • AI вакансии645
  • Fullstack вакансии521
  • Frontend вакансии460
  • Mobile вакансии28

По стеку

  • Go6 500
  • Java3 643
  • Node.js1 203
  • Kotlin1 161
  • Rust1 155
  • .NET787
  • PHP334
  • C++285
  • C#211

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

  • Kubernetes4 701
  • Linux-инфраструктура3 588
  • DevOps вакансии3 059
  • Terraform / IaC2 617
  • Мониторинг и Observability1 284
  • CI/CD929
  • SRE345
  • Кибербезопасность28

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

  • Аналитик данных556
  • Data Scientist443
  • Бизнес-аналитик412
  • Системный аналитик71

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

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

По регионам

  • Вакансии в США28 307
  • Вакансии в Европе10 602
  • Работа в России3 671
  • Вакансии в Канаде2 400

По формату

  • Удалённые вакансии44 927
  • Релокация в США28 307
  • Гибридная работа6 438
  • Офисная работа4 602

По уровню

  • Senior вакансии22 956
  • Middle вакансии11 692
  • Junior вакансии3 903

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify36 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

Вакансии из 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)
  • SRE/DevOps Engineer
  • Software Engineer II– Backup (Go/PHP)
  • Руководитель команды разработки (Team Lead)

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

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