這篇文章帶給大家的內容是關於PHP類型限制的詳細介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
導語:所謂型別約束,也就是定義變數的時候,必須指定其型別,而且以後變數也只能儲存該型別資料。 PHP 雖然是弱型別語言,但在 PHP 5 已經支援型別約束,包括物件、介面、數組,在 PHP 7 之後支援標量類型約束,下面簡單寫幾個範例。
標量類型、陣列
在參數中指明類型,如果不一致,會拋出一個可捕獲的致命錯誤
<?php /** * 数组类型约束 * @param array $arr */ function printArray(array $arr) { echo implode(',', $arr); } printArray(array(1, 2, 3));// 1,2,3 printArray('1');// Fatal error: Uncaught TypeError: Argument 1 passed to printArray() must be of the type array, string given, called in D:\WWW\test.php on line 13 and defined in D:\WWW\test.php:7 Stack trace: #0 D:\WWW\test.php(13): printArray('1') #1 {main} thrown in D:\WWW\test.php on line 7
如上所示,標量類型也是如此
<?php /** * 标量类型约束 * @param string $name * @param int $age * @param float $height * @param bool $isBoy */ function sayInfo(string $name, int $age, float $height, bool $isBoy) { echo '姓名:' . $name . ',年龄:' . $age . ',身高:' . $height . ',是否为男孩:' . ($isBoy ? '是' : '否'); } sayInfo('tom', 12, 134.5, true);// 姓名:tom,年龄:12,身高:134.5,是否为男孩:是
物件、介面
類型限制也可以指定為物件或介面。首先定義一個Human
接口,Boy
和Girl
兩個類別分別實作介面
<?php /** * 接口 * Interface Human */ interface Human { public function say(); public function run(); } /** * 实现 Human 接口 * Class Boy */ class Boy implements Human { public function say() { echo 'a boy say'; } public function run() { echo 'a boy run'; } } /** * 实现 Human 接口 * Class Girl */ class Girl implements Human { public function say() { echo 'a girl say'; } public function run() { echo 'a girl run'; } }
接下來新建一個類別來測試
<?php include './human.php'; class Action { /** * Boy 对象类型约束 * @param Boy $boy */ public function boySay(Boy $boy) { $boy->say(); } /** * Girl 对象类型约束 * @param Girl $girl */ public function girlSay(Girl $girl) { $girl->say(); } /** * Human 接口类型约束 * @param Human $obj */ public function humanRun(Human $obj) { $obj->run(); } } $obj = new Action(); $obj->boySay(new Boy());// a boy say echo '<br />'; $obj->girlSay(new Girl());// a girl say echo '<br />'; $obj->humanRun(new Boy());// a boy run echo '<br />'; $obj->humanRun(new Girl());// a girl run
當類型約束為具體物件Boy
或Girl
時,只能傳入要求的物件。當型別約束為介面 Human
時,可以傳入實作介面的類別 Boy
或 Girl
。
【相關推薦:PHP影片教學】
以上是PHP類型約束的詳細介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!