PHP中的類(lèi)型提示(type hinting)功能介紹
概述
從PHP5開(kāi)始,我們可以使用類(lèi)型提示來(lái)指定定義函數(shù)時(shí),函數(shù)接收的參數(shù)類(lèi)型。如果在定義函數(shù)時(shí),指定了參數(shù)的類(lèi)型,那么當(dāng)我們調(diào)用函數(shù)時(shí),如果實(shí)參的類(lèi)型與指定的類(lèi)型不符,那么PHP會(huì)產(chǎn)生一個(gè)致命級(jí)別的錯(cuò)誤(Catchable fatal error)。
類(lèi)名稱(chēng)和數(shù)組
在定義函數(shù)時(shí),PHP只支持兩種類(lèi)型聲明:類(lèi)名稱(chēng)和數(shù)組。類(lèi)名稱(chēng)表名該參數(shù)接收的實(shí)參為對(duì)應(yīng)類(lèi)實(shí)例化的對(duì)象,數(shù)組表明接收的實(shí)參為數(shù)組類(lèi)型。下面是一個(gè)例子:
function demo(array $options){
var_dump($options);
}
在定義demo()函數(shù)的時(shí)候,指定了函數(shù)接收的參數(shù)類(lèi)型為數(shù)組。如果我們調(diào)用函數(shù)時(shí),傳入的參數(shù)不是數(shù)組類(lèi)型,例如像下面這樣的調(diào)用:
$options='options';
demo($options);
那么將產(chǎn)生以下錯(cuò)誤:
Catchable fatal error: Argument 1 passed to demo() must be of the type array, string given,
可以使用null作為默認(rèn)參數(shù)
注意
有一點(diǎn)需要特別注意的是,PHP只支持兩種類(lèi)型的類(lèi)型聲明,其他任何標(biāo)量類(lèi)型的聲明都是不支持的,比如下下面的代碼都將產(chǎn)生錯(cuò)誤:
function demo(string $str){
}
$str="hello";
demo($str)
當(dāng)我們運(yùn)行上面的代碼時(shí),string會(huì)被當(dāng)做類(lèi)名稱(chēng)對(duì)待,因此會(huì)報(bào)下面的錯(cuò)誤:
Catchable fatal error: Argument 1 passed to demo() must be an instance of string, string given,
總結(jié)
類(lèi)型聲明也是PHP面向?qū)ο蟮囊粋€(gè)進(jìn)步吧,尤其是在捕獲某種指定類(lèi)型的異常時(shí)非常有用。
使用類(lèi)型聲明,也可以增加代碼的可讀性。
但是,由于PHP是弱類(lèi)型的語(yǔ)言,使用類(lèi)型聲明又于PHP設(shè)計(jì)的初衷相悖。
到底使用還是不使用類(lèi)型聲明,大家見(jiàn)仁見(jiàn)智吧,本菜鳥(niǎo)不:).
相關(guān)文章
淺析php如何實(shí)現(xiàn)App常用的秒發(fā)功能
很多社交軟件都是用了一種秒發(fā)機(jī)制,讓用戶(hù)的體檢感很好,今天我們也來(lái)談?wù)勥@些社交軟件中常用的小技巧。2016-08-08深入探討:Nginx 502 Bad Gateway錯(cuò)誤的解決方法
本篇文章是對(duì)Nginx 502 Bad Gateway錯(cuò)誤的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06詳解php中serialize()和unserialize()函數(shù)
這篇文章主要介紹了php的serialize()函數(shù)和unserialize()函數(shù)的相關(guān)資料,需要的朋友可以參考下2017-07-07Laravel 5框架學(xué)習(xí)之Eloquent (laravel 的ORM)
Laravel 的 Eloquent ORM 提供了漂亮、簡(jiǎn)潔的 ActiveRecord 實(shí)現(xiàn)來(lái)和數(shù)據(jù)庫(kù)的互動(dòng)。 每個(gè)數(shù)據(jù)庫(kù)表會(huì)和一個(gè)對(duì)應(yīng)的「模型」互動(dòng)。在開(kāi)始之前,記得把 config/database.php 里的數(shù)據(jù)庫(kù)連接配置好。2015-04-04利用 fsockopen() 函數(shù)開(kāi)放端口掃描器的實(shí)例
下面小編就為大家?guī)?lái)一篇利用 fsockopen() 函數(shù)開(kāi)放端口掃描器的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08TimeHelper簡(jiǎn)單快捷PHP日期時(shí)間助手類(lèi)庫(kù)使用詳解
這篇文章主要為大家介紹了TimeHelper簡(jiǎn)單快捷PHP日期時(shí)間助手類(lèi)庫(kù)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09ThinkPHP框架使用redirect實(shí)現(xiàn)頁(yè)面重定向的方法實(shí)例分析
這篇文章主要介紹了ThinkPHP框架使用redirect實(shí)現(xiàn)頁(yè)面重定向的方法,結(jié)合實(shí)例形式分析了thinkPHP中redirect進(jìn)行頁(yè)面重定向的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-04-04