Avatar ·

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` 对象? 解释