Задать вопрос

Как устроена обработка классов в PHP?

Я считал, что объекты и статические вызовы классов основываются на том, как мы описали их.
В данном примере изменяя родительский класс мы влияем на то, каким будет дочерний.
abstract class A {
    public static $constraints = true;
    
    public static function noConstraints(Closure $callback) {
        static::$constraints = false;
        
        return $callback();
    }
}

class B extends A {
    public function show()
    {
        var_dump(static::$constraints);
    }
}

(new B)->show(); // true

A::noConstraints(function() {
    (new B)->show(); // false
});

Насколько я понял, php в какой-то момент создает "шаблон" класса, который использует для создания объектов, статических вызовов, наследования. Используя статические методы/свойства мы можем влиять на состояние "шаблона".

Объясните как это работает.
  • Вопрос задан
  • 132 просмотра
Подписаться 2 Средний Комментировать
Ответ пользователя Антон Шаманов К ответам на вопрос (4)
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
при работе со статическими переменными и методами не создается экземпляр объекта. тут все немного сложнее, self::$constraints - это статическое свойство класса указывающее на значение класса в котором оно непосредственно вызывается(A), а static::$constraints - это так называемое позднее статическое связывание и свойство хранит значение текущего класса (B)
Ответ написан
Комментировать