2013-04-09 67 views
47

我在一些框架看到這行代碼:什麼意思是新的靜態?

return new static($view, $data); 

你怎麼理解的new static

+0

這是什麼框架? – 2013-04-09 09:55:59

+0

例如laravel,但我發現只有在核心,而不是在使用他們的API時 – Hello 2013-04-09 09:56:16

+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` 

這是通過名爲late static binding的PHP功能實現的;請勿將其用於關鍵字static的其他常規用途。

+10

hmm..shortly:new static() - 返回當前類的對象,而不管哪些類被擴展,new self() - 返回聲明或擴展該方法的類中的對象(最後一個版本功能)...我明白嗎? – Hello 2013-04-09 10:11:25

+1

@你好:基本上。 – 2013-04-09 10:21:52

+1

對於我來說就夠了)即使基本上) – Hello 2013-04-09 10:23:40