本地计算机上的代码运行良好,但在远程服务器上却很奇怪。 远程服务器上的PHP 5.5.9,本地机器上的PHP 5.5.28 这可能是远程服务器上出现这种奇怪行为的原因(PHP版本,服务器配置......)?
class A {
...
public static f1(){
...
self::$f2 = static::f2();
...
}
...
protected static function f2() {
...
var_dump(static::class); // returns B on the local machine and on the remote server
$f3 = function () {
var_dump(static::class); // returns B on the local machine and returns A on the remote server
...
$data = static::f4() ...
...
};
...
}
...
}
class B extends A{...}
...
self::$B = B::f1();
答案 0 :(得分:2)
这是在known bug中修复的PHP 5.5.14。以下是原始错误报告的引用:
Closures do not correctly capture the late bound class (static::) in some cases
说明强>
创建PHP闭包时,应该捕获封闭函数的后期绑定类。有许多案例涉及派生类和静态方法或静态闭包(或两者),但它们无法正常工作。
我所包含的测试脚本演示了该问题。我已经在PHP 5.6.0alpha1上对它进行了测试,但我也可以在PHP 5.5的各种版本中重现这个问题。