Что выведет код Middle ООП, трейты и интерфейсы спрашивают часто обновлено
static:: и self:: в наследовании
Вопрос
Что выведет скрипт (PHP 8.3)? По строке на каждый вывод.
<?php
class Model {
protected static string $table = 'models';
public static function tableSelf(): string { return self::$table; }
public static function tableStatic(): string { return static::$table; }
public function __toString(): string { return static::class; }
}
class User extends Model {
protected static string $table = 'users';
}
echo User::tableSelf(), "\n";
echo User::tableStatic(), "\n";
echo new User(), "\n";
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: models, users, User. self::$table берёт свойство класса, где написан метод: models. static::$table использует позднее связывание и смотрит в User: users. static::class внутри toString тоже даёт имя реального класса.
Что выведет
models
users
User
Разбор
self::$table берёт свойство класса, где написан метод: models. static::$table использует позднее связывание и смотрит в User: users. static::class внутри __toString тоже даёт имя реального класса.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «ООП, трейты и интерфейсы»
- Абстрактный класс или интерфейс в PHP
- Поверхностное клонирование
- Продвижение свойств в конструкторе
- Класс с интерфейсом и наследованием
- final и видимость констант
- Диспетчер событий с приоритетами
- Склад с исключениями предметной области
- Фигуры через интерфейс и абстрактный класс