行为是否低于php-5.6.x上的错误,或者这是预期的结果? 子类正在调用父类,父类通过闭包尝试实例化具有受保护构造函数的其他子类。
<?php
class Child extends Base
{
static function f()
{
parent::f(); // fails on php-5.6.x, doesn't fail on php-7.x
// Base:f(); // doesn't fail on php-5.6.x
}
}
class Base
{
static function f()
{
Tr::inTr(
function()
{
new Sibling();
}
);
}
}
class Sibling extends Base
{
protected function __construct()
{
echo 'I am protected';
}
}
class Tr
{
static function inTr($cb)
{
$cb();
}
}
Child::f();
v5.6.x上的输出:
Fatal error: Call to protected AnotherChild::__construct() from context 'Child'
但它在php-7.x上并没有失败,因为它可以调用受保护的构造函数。