что означает новая статика? [дубликат]


этот вопрос уже есть ответ здесь:

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

return new static($view, $data);

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

1   51  
2013-04-09 13:55:20

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.