PHP PHP  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Классы и объекты

Вместо пересказа ООП здесь приходится читать состояние объекта и замечать, где публичное свойство разрушает инвариант. Вопросы сравнивают конструкторы, методы, неизменяемые значения и способы спрятать детали реализации.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Определите, кто имеет право менять состояние объекта и какие условия должны оставаться истинными. Таймер — 55 минут.
Вопрос 1 из 20
Что даёт constructor property promotion?
PHP
final class User {
    public function __construct(
        public readonly int $id,
        private string $name,
    ) {}
}
Вопрос 2 из 20
Почему проверку суммы > 0 полезно выполнять в конструкторе объекта Money?
PHP
final class Money
{
    public function __construct(public readonly int $kopecks)
    {
        if ($kopecks <= 0) {
            throw new InvalidArgumentException('Сумма должна быть положительной');
        }
    }
}
Вопрос 3 из 20
Что произойдёт, если конструктор наследника объявлен и не вызывает parent::__construct(), необходимый родителю?
PHP
class BaseAccount
{
    public function __construct(protected int $id) {}
}
class PremiumAccount extends BaseAccount
{
    public function __construct(private string $level) {}
}
Вопрос 4 из 20
Можно ли вернуть другой объект из __construct?
Вопрос 5 из 20
Как лучше представить создание объекта из сложного массива внешних данных?
Вопрос 6 из 20
Что произойдёт при чтении типизированного свойства до инициализации?
PHP
class Item { public int $count; }
$item = new Item();
echo $item->count;
Вопрос 7 из 20
Чем public ?string $name отличается от неинициализированного public string $name?
PHP
class Profile
{
    public ?string $middleName;
    public string $name;
}

$profile = new Profile();
Вопрос 8 из 20
Что означает readonly-свойство?
PHP
class Order
{
    public function __construct(
        public readonly int $id,
    ) {}
}

$order = new Order(10);
Вопрос 9 из 20
Почему динамические свойства вида $obj->newField = 1 нежелательны в современном PHP?
Вопрос 10 из 20
В чём отличие static-свойства от обычного?
Вопрос 11 из 20
Какое значение вернёт метод name() у созданного объекта?
PHP
class User {
  public function __construct(private string $name) {}
  public function name(): string { return $this->name; }
}
echo (new User('Ира'))->name();
Вопрос 12 из 20
Когда уместен static-метод?
PHP
final class Email
{
    public static function normalize(string $value): string
    {
        return mb_strtolower(trim($value), 'UTF-8');
    }
}
Вопрос 13 из 20
Чем static:: отличается от self:: в наследуемом методе?
PHP
class BaseLabel
{
    public static function selfName(): string { return self::class; }
    public static function lateName(): string { return static::class; }
}
class ChildLabel extends BaseLabel {}
Вопрос 14 из 20
Метод add() возвращает $this. Для чего это обычно делают?
Вопрос 15 из 20
Почему метод calculateTotal() не должен незаметно отправлять письмо?
Вопрос 16 из 20
Как private-свойство помогает сохранять инвариант?
PHP
final class Account
{
    private int $balance = 1000;

    public function withdraw(int $amount): void
    {
        if ($amount > $this->balance) {
            throw new DomainException('Недостаточно средств');
        }
        $this->balance -= $amount;
    }
}
Вопрос 17 из 20
Чем protected отличается от private?
Вопрос 18 из 20
Почему набор get/set для каждого поля не всегда является хорошей инкапсуляцией?
Вопрос 19 из 20
Какой дизайн лучше защищает баланс от отрицательного значения?
Вопрос 20 из 20
Объект возвращает внутренний изменяемый массив по ссылке. Какой риск возникает?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу