PHP如同其他語言(OC,Java),也引入了參數類型的檢查,不過,PHP只有數組和對象兩種限定類型,諸如string、integer這樣的限定類型是沒有的。參數類型限制,這個不論是介面,抽象類別,函數,方法,在5.3+以上版本都可以使用,不過目前只能聲明 array object 這兩種.
這樣做的好處:
①:可以協調編碼,至少我不用看注釋或代碼,就知道該傳個怎樣的參數進去。
②:對傳入的對象使用型別宣告,可不需要在函數內使用 is_a 函數鑒別傳入對象是否合法而把甄別工作交予編譯器完成
is_a -- 如果對象屬於該類或該類是此對象的父類則返回 TRUE
class User{ public $name; public $password; function __construct($name,$password){ $this->name=$name; $this->password=$password; } }//參數可以指定物件類型function f1(User $user){ echo $user->name,”,”,$user->password; }//參數可以指定數群組類型function f2(array $arr){}//參數不可以指定基本類型,下面一句會出錯function f3(string $s){}
好的,接下來進行驗證:
當給f1()函數傳入字串時,會報錯:
$a = 'xiaojun';
$ret = f1($a);
錯誤:
PHP Catchable fatal error: Argument 1 passed to f1() must be an instance of User, string given, called in /tmp/f921205b-ef87-4aa8-b715-a131af661abd/code on line 16 and defined in /tmp/f921205b-ef87-4aa8-b715-a131af661abd/code on line 11
錯誤描述的很清楚,必須給函數傳遞一個User的執行個體化對象。
這樣才是正確的:
// 執行個體化對象,並初始化$user_obj = new User("kaiyi", '123456');$ret = f1($user_obj);