Я считал, что объекты и статические вызовы классов основываются на том, как мы описали их.
В данном примере изменяя родительский класс мы влияем на то, каким будет дочерний.
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 в какой-то момент создает "шаблон" класса, который использует для создания объектов, статических вызовов, наследования. Используя статические методы/свойства мы можем влиять на состояние "шаблона".
Объясните как это работает.