站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        期待已久的PHP方法參數(shù)類型約束它來咯

        本篇文章給大家介紹一下PHP的方法參數(shù)類型約束。有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對大家有所幫助。

        期待已久的PHP方法參數(shù)類型約束它來咯

        關(guān)于PHP的方法參數(shù)類型約束

        在之前的文章PHP方法參數(shù)的那點(diǎn)事兒中,我們講過關(guān)于PHP方法參數(shù)的一些小技巧。今天,我們帶來的是更加深入的研究一下PHP中方法的參數(shù)類型。

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

        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,

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

        function testB(int $a){     var_dump($a); } testB(1); testB('52aadfdf'); // 字符串強(qiáng)轉(zhuǎn)為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);  // 數(shù)字會強(qiáng)轉(zhuǎn)為字符串 // testC(new A());  // Fatal error: Uncaught TypeError: Argument 1 passed to testC() must be of the type string

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

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

        // 接口類型 interface D{} class childD implements D{} function testD(D $d){     var_dump($d); } testD(new childD());  // 回調(diào)匿名函數(shù)類型 function testE(Callable $e, string $data){     $e($data); } testE(function($data){     var_dump($data); }, '回調(diào)函數(shù)');

        測試代碼:

        https://github.com/zhangyue0503/dev-blog/blob/master/php/202001/%E5%85%B3%E4%BA%8EPHP%E7%9A%84%E6%96%B9%E6%B3%95%E5%8F%82%E6%95%B0%E7%B1%BB%E5%9E%8B%E7%BA%A6%E6%9D%9F.md

        推薦學(xué)習(xí):php視頻教程

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 亚洲精品国产精品乱码视色| 国产女主播精品大秀系列| 伊人久久精品影院| 国产精品55夜色66夜色| 四虎国产精品永久在线看| 精品国产福利第一区二区三区| 亚洲国产精品无码成人片久久| 久久久这里有精品中文字幕| 国产福利精品视频自拍| 国产成人精品久久一区二区三区| 亚洲精品你懂的在线观看| 国产在线精品一区二区高清不卡 | 国产精品视频白浆免费视频| 午夜精品久久久久9999高清| 国产精品自在欧美一区| 久久亚洲精品中文字幕三区| 精品人妻中文字幕有码在线| 久久夜色精品国产噜噜亚洲AV| 亚洲国产婷婷综合在线精品| 久久国产精品一区| 国产精品一香蕉国产线看观看 | 久久精品www人人爽人人| 无码精品人妻一区二区三区免费| 精品无码三级在线观看视频| 国产精品久久久99| 99久久精品国产综合一区 | 亚洲国产精品VA在线看黑人| 欧美日韩综合精品| 国产精品免费久久| 国产成人精品a视频一区| 久久精品一区二区国产| 成人午夜精品视频在线观看 | 久久亚洲中文字幕精品一区 | 亚洲精品V欧洲精品V日韩精品| 亚洲国产精品国产自在在线| 亚洲国产成人乱码精品女人久久久不卡| 久久精品国产福利国产琪琪| 久久精品国产第一区二区| 免费精品久久久久久中文字幕| 欧美精品色婷婷五月综合| 欧美成人精品网站播放 |