2012-07-28 33 views
4

那里当你忽略其类型暗示输入参数这样的方法有一些情况:捕致命错误:传递给富::酒吧(参数1)必须实现接口BazInterface,空给出

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

你怎么能允许空值,而不改变父类的?

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

回答

7

解决办法是默认为空值添加到输入参数是这样的:

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

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

相关问题