2013-04-09 66 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