首页 >后端开发 >php教程 >PHP 5.2 到 5.3 迁移:`new self()` 和 `new static()` 有什么区别?

PHP 5.2 到 5.3 迁移:`new self()` 和 `new static()` 有什么区别?

Barbara Streisand
Barbara Streisand原创
2024-12-18 15:40:12657浏览

PHP 5.2 to 5.3 Migration: What's the Difference Between `new self()` and `new static()`?

理解 PHP 中“新自我”和“新静态”之间的差异

将 PHP 5.3 库转换为 PHP 5.2 可能会带来挑战,主要是由于语法上的差异。症结之一是使用后期静态绑定,例如 return new static($options)。

转换为“新自我”的影响

将 return new static($options) 更改为 return new self($options) 将不会产生相同的结果。 PHP 5.3 中引入的后期静态绑定允许您使用 static 关键字调用类的方法,该关键字引用调用该方法的类。然而,PHP 5.2 不支持此功能。

“新自我”和“新静态”之间的主要区别

  • 自我: 指的是new关键字所在的类编写。
  • 静态: 在后期静态绑定 (PHP 5.3 ) 中,指的是调用该方法的类。

示例:

考虑以下内容code:

class A {
    public static function get_self() {
        return new self();
    }

    public static function get_static() {
        return new static();
    }
}

class B extends A {}

echo get_class(B::get_self());  // A
echo get_class(B::get_static()); // B
echo get_class(A::get_self()); // A
echo get_class(A::get_static()); // A

在此示例中,get_self 中的自调用绑定到类 A,因为该方法是在 A 中定义的。但是,get_static 中的静态调用绑定到该方法所在的类被称为,根据上下文而变化(例如,第二个中的 B

结论

对于 PHP 5.2,后期静态绑定没有直接的解决方法。用新的 self 替换 new static 不会提供相同的行为。将 PHP 5.3 代码转换为早期版本时,了解这些关键字之间的区别至关重要。

以上是PHP 5.2 到 5.3 迁移:`new self()` 和 `new static()` 有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

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