2012-01-17 75 views

回答

5

那就是type hinting。這意味着你說這個論點必須是該類或其後代類的一個實例。

PHP 5引入了Type Hinting。函數現在可以強制參數成爲對象(通過在函數原型中指定類的名稱)或數組(自PHP 5.1起)。但是,如果將NULL用作默認參數值,則它將被允許作爲任何稍後調用的參數。

0

A comment in PHP's page on function arguments提供了一些提示。

報價:

可以使用(很)爲您的功能有限簽名,specifing 類型的允許參數。

例如:

public function Right(My_Class $a, array $b)

告訴第一個參數通過My_Class的對象,第二陣列必須。 My_Class意味着你也可以通過 擴展My_Class或實現的類(如果My_Class是抽象類) My_Class類的對象。如果您確切需要My_Class,則需要使其成爲最終的 ,或者添加一些代碼以檢查真正的$ a。

另外請注意,(不幸的是)「數組」是您可以在簽名中使用的唯一內置類型。任何其他類型即:

public function Wrong(string $a, boolean $b)

將導致一個錯誤,因爲PHP會抱怨$ a不類字符串的 對象(和$ b不是布爾類的對象)。所以如果你需要知道$ a是一個字符串還是$ b bool,你需要在你的函數體中寫入 一些代碼,並且如果你檢測到 類型不匹配的時候拋出異常(或者你可以嘗試拋出if這是可行的)。