Что означает новый статический? - программирование
Подтвердить что ты не робот

Что означает новый статический?

Я видел в некоторых рамках эту строку кода:

return new static($view, $data);

как вы понимаете new static?

4b9b3361

Ответ 1

Когда вы пишете 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.