self - 就是这个类,是代码段里面的这个类。
static - PHP 5.3加进来的只得是当前这个类,有点像$this的意思,从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类。
class A {
public function create1()
{
return new self();
}
public function create2()
{
return new static();
}
}
class B extends A {
}
$objA = new A();
echo get_class($objA->create1());
echo get_class($objA->create2());
echo "<br/>";
$obj = new B();
echo get_class($obj->create1());
echo get_class($obj->create2());
显示结果如下:
AA
AB
从上述代码就可以清晰的看出,new self 实例化的是代码区块所在的类,
new static 实例化的是在当前类(如果是子类,实例化的就是子类,即使方法是写在父类中);