理解 new self 和 new static 之间的区别
在 PHP 中,self 和 static 通常在类方法中用于实例化新对象,尤其是在继承方面。不过,这两个关键字之间存在细微的差别。
new self 与 new static
对 PHP 5.2 的影响
将 PHP 5.3 库转换为 PHP 5.2(缺乏对后期静态绑定的支持)时,替换new static($options) 与 new self($options) 可能不会产生预期结果。这是因为 self 将始终引用实际写入 new 的类,而 static 在目标类解析中提供了灵活性。
示例:
考虑以下代码PHP 5.2:
class A { public static function create() { return new self(); } } class B extends A {} $object = B::create(); // $object is of class A, not B
在 PHP 5.3 中,相同的代码会实例化类 B 的对象,因为 static将解析为调用类。
当前建议
由于不再积极支持 PHP 5.2,因此找到解决此问题的方法是不可行的。出于兼容性原因,建议完全避免使用后期静态绑定。
以上是PHP `self` 与 `static`:`new static()` 何时与 `new self()` 不同?的详细内容。更多信息请关注PHP中文网其他相关文章!