关闭PHP5.5与5.6的后期静态绑定

时间:2015-03-01 08:10:50

标签: php php-5.5 php-5.6

为什么闭包中的new static(在类static方法中)在PHP5.5中等于new self,而它在PHP5.6中是否正确绑定?< / p>

假设:

abstract class Parent {
    public function __construct($something)
    {
        $this->something = $something;
    }

    public static function make($array)
    {
        return array_map(function ($el) {
            return new static($el);
        }, $array);
    }
}

class Child extends Parent {

}

然后

Child::make($someArray); 
// PHP5.5 FatalError: cannot instantiate abstract class Parent
// PHP5.6 works fine, as expected

在5.5中,这将按预期工作:

public static function make($array)
{
    $child = get_called_class();

    return array_map(function ($el) use ($chlid) {
        return new $child($el);
    }, $array);
}

但为什么会这样呢?我还没有在php.net上发现有关5.6中静态绑定更改的任何提及。

1 个答案:

答案 0 :(得分:4)

看起来像this bug,修复了5.5.14