2013-04-09 3 views
47

я видел в некоторых рамках этой строки кода:Что означает новый статический?

return new static($view, $data); 

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

+0

Что это за рамки? –

+0

например laravel, но я обнаружил, что только в ядре, не используя их api – Hello

+2

Проверьте эту страницу для получения дополнительной информации; http://stackoverflow.com/questions/5197300/new-self-vs-new-static – 2013-04-09 09:57:14

ответ

76

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

+10

hmm..shortly: new static() - возвращает объект текущего класса, независимо от того, какие классы расширены, и новый self() - возвращает объект из класса, в котором этот метод был объявлен или расширен (последняя версия функция) ... Я понимаю правильно? – Hello

+1

@Hello: В принципе. –

+1

да, хватит для меня), даже если в принципе) – Hello

Смежные вопросы