后期静态绑定:分析“新自我”和“新静态”
将 PHP 库从版本 5.3 转换到 5.2 时,一个遇到后期静态绑定的问题,例如“return new static($options)”之类的代码片段。在 PHP 5.2 中,此类语法不可用。本文旨在探讨“new self”和“new static”之间的细微差别,并确定“new self”是否在 PHP 5.2 环境中提供等效的功能。
“new self”和“new static”之间的区别"new static"
在 PHP 5.2 中,“self”引用显式声明“new”关键字的类。相比之下,“static”在 PHP 5.3 中具有最新的静态绑定功能,它指向在继承层次结构中调用该方法的类。
为了说明这种区别,请考虑以下类结构:
class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {}
在此示例中,B 类中的方法“get_self”和“get_static”是从 A 类继承的。在 B 中调用“get_self”将返回一个实例类 A 的,因为“self”引用绑定到定义该方法的类。但是,在 B 中调用“get_static”将返回类 B 的实例,因为后期静态绑定中的“static”将解析为调用该方法的类。
应用“new static”到 PHP 5.2
不幸的是,没有直接的解决方法可以在 PHP 中实现 PHP 5.3 的“新静态”功能5.2. “return new self($options)”语句不会产生与 PHP 5.3 中相同的结果,因为“self”始终指的是定义该方法的类,而不是调用该方法的类。
以上是PHP 5.2 vs. 5.3:'新自我”能否取代'新静态”?的详细内容。更多信息请关注PHP中文网其他相关文章!