2012-07-28 51 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上看到了一個例子,所以我決定在這裏記錄它。希望有人會發現它有用。

相關問題