Я видел в некоторых рамках эту строку кода:
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
.