Выбор ответа Middle ООП, трейты и интерфейсы спрашивают часто обновлено
self и static: позднее статическое связывание
Вопрос
Что выведет Child::create()?
class Base {
public static function create(): string {
return get_class(new self()) . ' ' . get_class(new static());
}
}
class Child extends Base {}
echo Child::create();
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Base Child. new self() создаёт объект класса, где написан код, то есть Base. new static() использует позднее статическое связывание и создаёт объект класса, через который вызвали метод: Child.
Варианты ответа
Base Childправильный ответBase BaseChild ChildChild Base
Разбор
new self() создаёт объект класса, где написан код, то есть Base. new static() использует позднее статическое связывание и создаёт объект класса, через который вызвали метод: Child. На этом строят фабричные методы и fluent-интерфейсы в базовых классах, например Model::create() в ORM.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «ООП, трейты и интерфейсы»
- Абстрактный класс или интерфейс в PHP
- Поверхностное клонирование
- Продвижение свойств в конструкторе
- Класс с интерфейсом и наследованием
- final и видимость констант
- Диспетчер событий с приоритетами
- Склад с исключениями предметной области
- Фигуры через интерфейс и абстрактный класс