亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP的方法參數類型約束實例講解

發布時間:2021-09-13 17:37:38 來源:億速云 閱讀:316 作者:chen 欄目:大數據

這篇文章主要講解了“PHP的方法參數類型約束實例講解”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“PHP的方法參數類型約束實例講解”吧!

 

關于PHP的方法參數類型約束

在PHP5之后,PHP正式引入了方法參數類型約束。也就是如果指定了方法參數的類型,那么傳不同類型的參數將會導致錯誤。在PHP手冊中,方法的類型約束僅限于類、接口、數組或者callable回調函數。如果指定了默認值為NULL,那么我們也可以傳遞NULL作為參數。

class A{}
function testA(A $a){
   var_dump($a);
}

testA(new A());
// testA(1);
// Fatal error: Uncaught TypeError: Argument 1 passed to testA() must be an instance of A, int given,
 

在這個例子中,我們定義了參數類型為A類,所以當我們傳遞一個標量類型時,直接就會返回錯誤信息。

function testB(int $a){
   var_dump($a);
}
testB(1);
testB('52aadfdf'); // 字符串強轉為int了
// testB('a');
// Fatal error: Uncaught TypeError: Argument 1 passed to testB() must be of the type int, string given

function testC(string $a){
   var_dump($a);
}
testC('測試');
testC(1);  // 數字會強轉為字符串
// testC(new A());
// Fatal error: Uncaught TypeError: Argument 1 passed to testC() must be of the type string
 

在手冊中明確說明了標量類型是不能使用類型約束的。但其實是可以使用的,不過如果都是標量類型則會進行相互的強制轉換,并不能起到很好的約束作用。比如上例中int和string類型進行了相互強制轉換。指定了非標量類型,則會報錯。此處是本文的重點,小伙伴們可要劃個線了哦。其實說白了,如果我們想指定參數的類型為固定的標量類型的話,在參數中指定并不是一個好的選擇,最好還是在方法中進行再次的類型判斷。而且如果參數中進行了強轉,也會導致方法內部的判斷產生偏差。

最后我們再看一看接口和匿名方法的類型約束。匿名參數類型在Laravel等框架中非常常見。

// 接口類型
interface D{}
class childD implements D{}
function testD(D $d){
   var_dump($d);
}
testD(new childD());

// 回調匿名函數類型
function testE(Callable $e, string $data){
   $e($data);
}
testE(function($data){
   var_dump($data);
}, '回調函數');
 


感謝各位的閱讀,以上就是“PHP的方法參數類型約束實例講解”的內容了,經過本文的學習后,相信大家對PHP的方法參數類型約束實例講解這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

灵丘县| 甘肃省| 工布江达县| 若尔盖县| 惠水县| 称多县| 长葛市| 剑河县| 台湾省| 阿鲁科尔沁旗| 荣成市| 潮州市| 鸡西市| 衡水市| 周口市| 泾阳县| 南京市| 海晏县| 中超| 七台河市| 临沧市| 黄陵县| 迁安市| 齐齐哈尔市| 大姚县| 杂多县| 阿合奇县| 集贤县| 巴彦淖尔市| 辉南县| 右玉县| 朝阳区| 沙湾县| 仁怀市| 龙游县| 乌鲁木齐县| 青铜峡市| 湖南省| 周宁县| 库尔勒市| 北海市|