繁体   English   中英

可捕获的致命错误:传递给Foo :: bar()的参数1必须实现接口BazInterface,null给出

[英]Catchable Fatal Error: Argument 1 passed to Foo::bar() must implement interface BazInterface, null given

在某些情况下,您覆盖具有类型提示输入参数的方法,如下所示:

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()

如何在不更改父类的情况下允许空值?

这是一个真实世界的例子,因为父类可以是第三方库或框架的一部分,因此更改它不是一个选项。

解决方法是将默认的空值添加到输入参数,如下所示:

class Foo extends FooParent
{
    public function bar(BazInterface $baz = null)
    {
        // ...
    }
}

这不是我所期望的,因为如果没有提供,默认值将默认值分配给变量,我没想到它会影响允许的输入。 但我在http://php.net/manual/en/language.oop5.typehinting.php上看到了例子,所以我决定在这里记录它。 希望有人会觉得它很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM