Я видел в некоторых рамках эту строку кода:
return new static($view, $data);
как вы понимаете new static ?
Когда вы пишете new self() внутри функции-члена класса, вы получаете экземпляр этого класса. Это волшебство ключевого слова « self .
Так:
class Foo { public static function baz() { return new self(); } } $x = Foo::baz(); // $x is now a `Foo`
Вы получаете Foo даже если статический классификатор, который вы использовали, был для производного класса:
class Bar extends Foo { } $z = Bar::baz(); // $z is now a `Foo`
Если вы хотите включить полиморфизм (в некотором смысле), и PHP обратит внимание на используемый вами квалификатор, вы можете поменять ключевое слово self для ключевого слова static :
class Foo { public static function baz() { return new static(); } } class Bar extends Foo { } $wow = Bar::baz(); // $wow is now a `Bar`, even though `baz()` is in base `Foo`
Это стало возможным благодаря функции PHP, известной как поздняя статическая привязка ; не путайте его для других, более обычных применений ключевого слова static .