在某些情况下,您覆盖具有类型提示输入参数的方法,如下所示:
class FooParent
{
public function bar(BazInterface $baz)
{
// ...
}
}
并且您希望允许传递空值作为输入参数。
如果删除界面类型提示
class Foo extends FooParent
{
public function bar($baz)
{
// ...
}
}
你会收到这样的错误:
Fatal error: Declaration of Foo::bar() must be compatible with that of FooParent::bar()
如何在不更改父类的情况下允许空值?
这是一个真实世界的例子,因为父类可以是第三方库或框架的一部分,所以更改它不是一种选择。
答案 0 :(得分:8)
解决方案是将默认空值添加到输入参数,如下所示:
class Foo extends FooParent
{
public function bar(BazInterface $baz = null)
{
// ...
}
}
这不是我的预期,因为如果没有提供,默认值会为变量分配默认值,我没想到它会影响允许的输入。但是我在http://php.net/manual/en/language.oop5.typehinting.php看到了例子,所以我决定在这里记录它。希望有人会发现它很有用。