lxg*_*lxg 4 php oop constructor
我们知道PHP不接受与父代签名不同的子代方法。我认为这是同与构造函数:PHP文档的状态是
这也适用于PHP 5.4以上的构造函数。5.4之前的构造函数签名可能有所不同。
但是,似乎继承的构造函数在PHP版本> 5.4中仍然可以有所不同。例如,以下代码不会触发任何警告或通知:
class Something { }
class SomeOtherThing { }
class Foo
{
public function __construct(Something $foo)
{
}
public function yay()
{
echo 'yay';
}
}
class Bar extends Foo
{
public function __construct($foo, SomeOtherThing $bar = null)
{
}
}
$x = new Bar(new Something());
$x->yay();
Run Code Online (Sandbox Code Playgroud)
根据文档,由于构造函数签名不同,因此代码应触发错误。
在PHP 5.6.4上进行了尝试。与其他版本相同的效果。
那么,那是怎么回事?尽管文档中有说明,但不同的构造方法签名仍然合法吗?还是这将在以后的版本中修复?