Что выведет код 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 ошибок.