php static ::里面的匿名函数

时间:2015-12-18 19:40:16

标签: php

本地计算机上的代码运行良好,但在远程服务器上却很奇怪。 远程服务器上的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();

1 个答案:

答案 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的各种版本中重现这个问题。