2011-11-16 79 views

回答

4

可以擴展接口,如類:

interface Editable {} 
interface Deletable {} 
interface EditAndDeletable extends Editable, Deletable {} 

function clear(EditAndDeletable $object) { 
... 
} 

類型$對象現在已經實現可編輯和可刪除的所有方法。

1

如果我是你,我有這樣一個問題,我可能會做這樣的事情:

interface Editable {} 
interface Deletable {} 

function clear($object) { 
    if($object instanceof Editable){ 
     ... 
    }elseif($object instanceof Deletable ){ 
     ... 
    }else{ 
     throw new InvalidArgumentException("\$object must be of type 'Editable' or 'Deletable' but " . get_class($object) . " was provided."); 
    } 
    ... 
} 

而不是試圖建立一個接口只是一個說法我會更傾向於簽名處理函數體中的參數,並從簽名中移除嚴格的要求。如果你確實得到了一個不合適的論證,那麼Exception就是爲了保持整潔。