public static function init() {
$instance = new static();
$instance->doStuff();
}
Вы можете видеть, что это работает над 3v4l , который является отличным местом для песочницы PHP.
Почему static
? Вы были правы, обращаясь к руководству PHP для поздних привязок stati c , и жаль, что страница явно не упоминает об этом конкретном c использовании ключевого слова stati c ( хотя есть комментарий, который делает).
В контексте поздних привязок stati c, вы можете заменить self
на static
, и он будет использовать экземпляр класса, тогда как self
будет используйте класс, в котором живет код. Например:
<?php
class A {
}
class B extends A {
public function test() {
echo parent::class;
echo self::class;
echo static::class;
}
}
class C extends B {
}
$c = new C();
$c->test();
Это работает даже в контексте stati c (к сожалению, ключевое слово stati c используется в двух разных контекстах: stati c звонки, и позднее stati c привязка), как в моем примере выше.