首页 >后端开发 >php教程 >PHP `self` 与 `static`:`new static()` 何时与 `new self()` 不同?

PHP `self` 与 `static`:`new static()` 何时与 `new self()` 不同?

Susan Sarandon
Susan Sarandon原创
2024-12-14 00:15:09522浏览

PHP `self` vs. `static`: When Does `new static()` Differ from `new self()`?

理解 new self 和 new static 之间的区别

在 PHP 中,self 和 static 通常在类方法中用于实例化新对象,尤其是在继承方面。不过,这两个关键字之间存在细微的差别。

new self 与 new static

  • self 指的是定义 new 关键字的类,考虑到当前作用域和继承层次结构。
  • static,在 PHP 5.3 中引入,指的是调用 new 方法的类,无论其继承层次结构如何。

对 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn