я видел в некоторых рамках этой строки кода:Что означает новый статический?
return new static($view, $data);
, как вы понимаете new static
?
я видел в некоторых рамках этой строки кода:Что означает новый статический?
return new static($view, $data);
, как вы понимаете new static
?
Когда вы пишете new self()
внутри функции-члена класса, вы получаете экземпляр этого класса. That's the magic of the self
keyword.
Итак:
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, известной как late static binding; не путайте его для других, более обычных применений ключевого слова static
.
hmm..shortly: new static() - возвращает объект текущего класса, независимо от того, какие классы расширены, и новый self() - возвращает объект из класса, в котором этот метод был объявлен или расширен (последняя версия функция) ... Я понимаю правильно? – Hello
@Hello: В принципе. –
да, хватит для меня), даже если в принципе) – Hello
Что это за рамки? –
например laravel, но я обнаружил, что только в ядре, не используя их api – Hello
Проверьте эту страницу для получения дополнительной информации; http://stackoverflow.com/questions/5197300/new-self-vs-new-static – 2013-04-09 09:57:14