概述
從PHP5開始,我們可以使用類型提示來指定定義函數時,函數接收的參數類型。如果在定義函數時,指定了參數的類型,那麼當我們調用函數時,如果實參的類型與指定的類型不符,那麼PHP會產生一個致命層級的錯誤(Catchable fatal error)。
類名稱和數組
在定義函數時,PHP只支援兩種型別宣告:類名稱和數組。類名稱表名該參數接收的實參為對應類執行個體化的對象,數組表明接收的實參為數群組類型。下面是一個例子:
複製代碼 代碼如下:
function demo(array $options){
var_dump($options);
}
在定義demo()函數的時候,指定了函數接收的參數類型為數組。如果我們調用函數時,傳入的參數不是數群組類型,例如像下面這樣的調用:
複製代碼 代碼如下:
$options='options';
demo($options);
那麼將產生以下錯誤:
複製代碼 代碼如下:
Catchable fatal error: Argument 1 passed to demo() must be of the type array, string given,
可以使用null作為預設參數
注意
有一點需要特別注意的是,PHP只支援兩種類型的型別宣告,其他任何標量類型的聲明都是不支援的,比如下下面的代碼都將產生錯誤:
複製代碼 代碼如下:
function demo(string $str){
}
$str="hello";
demo($str)
當我們運行上面的代碼時,string會被當做類名稱對待,因此會報下面的錯誤:
Catchable fatal error: Argument 1 passed to demo() must be an instance of string, string given,
總結
型別宣告也是PHP物件導向的一個進步吧,尤其是在捕獲某種指定類型的異常時非常有用。
使用型別宣告,也可以增加代碼的可讀性。
但是,由於PHP是弱類型的語言,使用型別宣告又於PHP設計的初衷相悖。
到底使用還是不使用型別宣告,大家見仁見智吧,本菜鳥不:).