我正在使用NetBeans编辑器。在下面的代码中,没有错误,但我对某些事感到困惑:为什么我们return new static
?
class test {
static public function getnew(){
return new static;
}
}
class child extends test {}
$obj1 = new test ();
$obj2 = new $obj1;
var_dump($obj1!==$obj2);
$obj3 = test::getnew();
var_dump($obj3 instanceof test);
$obj4 = child::getnew();
var_dump($obj4 instanceof child );
结果输出:
boolean true
boolean true
boolean true
那么return new static
在这做什么?
答案 0 :(得分:1)
这是PHP {5.3}中引入的Late Static Bindings的一部分。
基本上,static
关键字将在运行时被当前类替换。因此,在child
的情况下,它将评估为:
static public function getnew(){
return new child;
}
使用__CLASS__
或self
的问题是它们会在编译时被替换。因此,如果您要执行new self;
,它们将始终返回test
类的实例(其中定义了getnew()
函数),即使在子类上调用该方法也是如此。 static
关键字可以防止这种情况发生。
想要使用它的主要原因是你不必在每个子类中覆盖getnew
。
答案 1 :(得分:0)
return new static;
实例化课程" test"与后期静态绑定。所以当你扩展课程时,测试"这将为您提供扩展类的实例。将它用作静态工厂方法非常方便。