PHP中new self和new static的区别?后期静态绑定
大家好!第三天我还在纠结PHP中的一个奇怪现象。我有一个基类,通过静态方法创建自己的实例。当我继承这个类时,我期望子类会创建自己类型的对象,但不知为何创建的是父类对象。
这是一个简化的例子:
```php
class ParentClass {
public static function create() {
return new self();
}
}
class ChildClass extends ParentClass {
// 没有重写
}
$obj = ChildClass::create();
// $obj 是 ParentClass,而不是 ChildClass!
echo get_class($obj); // ParentClass
```
我读过关于后期静态绑定(Late Static Binding)和关键字 `static` 的内容,但还没有完全理解它是如何工作的。为什么 `new self()` 总是引用编写这段代码的类,而不是调用方法的类?我该如何让 `ChildClass::create()` 返回 `ChildClass` 对象,而不是 `ParentClass` 对象?
解释