我们在使用php代码新建对象的时候,一般会用到new self与new static,那么它们在使用的时候区别在哪里?
先说说new static(),new static与new self一样,在php代码中,它是用来新建一个对象的.
那么他们之间的不同之处在哪里呢?
new static与new self之间的不同在于在于新创建的是同一个类的实例与不同类的实例.
如下面这段示例:
class newdx {
public function hqnewself() {
return new self();
}
public function hqnewstatic() {
return new static();
}
}
$newdx = new newdx();
echo get_class($newdx->hqnewself());
echo get_class($newdx->hqnewstatic());
?>
以上代码通过使用php自带的get_class()方法是来用于获取指定实例所属类名
运行后可以得出,无论他们调用的是hqnewself()函数,还是hqnewstatic()函数,其结果都为newdx
然而当我们继续创建
class newcl1 extends newdx {
}
class newcl2 extends newdx {
}
$newcl1 = new newcl1();
$newcl2 = new newcl2();
echo get_class($newcl1->hqnewself());
echo get_class($newcl1->hqnewstatic());
echo get_class($newcl2->hqnewself());
echo get_class($newcl2->hqnewstatic());
以上代码表示newdx类有两个子类,由于newdx类的hqnewself()和hqnewstatic()是公共的,所以在子类中依旧继承了这两方法。
其运行结果依次为newdx、newcl1、newdx、newcl2,无论是子类newcl1,还是子类newcl2,调用hqnewself()即new self()其返回的对象都是类newdx,而hqnewstatic()即 new static(),则返回了调用者子类的实例名称.
他们的区别在类的继承中才会显示出来,当它们没有任何继承,那么使用他们没有什么区别。
new self()返回的实例都是同一个类的实例,而new static()则是由调用的子类决定的.