您好,登錄后才能下訂單哦!
這篇文章主要介紹“PHP類型聲明特性實例分析”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“PHP類型聲明特性實例分析”文章能幫助大家解決問題。
最近在研究PHP7的新特性,發現PHP也開始搞類型聲明了,這么做的好處很明顯:能提高程序運行速度。
下面開始介紹這一新特性:
默認情況下,所有的PHP文件都處于弱類型校驗模式。
PHP7+增加了類型聲明的特性,類型聲明有兩種模式:
強制模式 (默認模式) 我的理解就是強制轉換成需要的類型,不嚴格區分類型而是強轉,類型不一致不報錯
嚴格模式 嚴格校驗類型,類型與聲明的不一致,報錯
標量類型聲明語法格式:
declare(strict_types=1);
其中strict_types的值:
1表示嚴格類型校驗模式,作用于函數調用和返回語句;
0表示弱類型校驗模式
可以使用的類型參數有:
string
int
float
bool
interfaces
array
callable
強制模式(默認模式)
<?php function sum(int ...$ints) { return array_sum($ints); } print(sum(1, '2', 3.1)); ?>
以上程序執行輸出結果為:6
分析一下即:將字符串類型的'2'轉換成整型的2,將float類型的3.1轉換為整型的3后再相加,得出結果6。
嚴格模式
<?php declare(strict_types=1); function sum(int ...$ints) { return array_sum($ints); } print(sum(1, '2', 3.1)); ?>
以上程序因為采用了嚴格模式,因為第二個參數不是int類型,執行結果報錯如下:
PHP Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……
返回類型聲明
PHP7+ 增加了對返回類型聲明的支持,返回類型聲明指明了函數返回值的類型。
可以聲明的返回類型有:
string
int
float
bool
interfaces
array
callable
我踩的坑
這里我還真趟過坑,在新版本的phpstorm中會根據返回值類型出現提示代碼,引導添加返回類型聲明,我就加上了。但是后面因為業務的變化或者代碼優化只修改了返回值(比如之前返回的是array,修改后返回了int),卻忘記了修改返回類型聲明(畢竟習慣了PHP弱語言類型這么多年了...),這樣是會拋出異常導致報錯的,這就是我踩到的坑,小伙們們在使用過程中要注意。
思考
GO語言是不會出現我上面說的問題的, 因為如果返回值類型和返回類型聲明是編譯不通過的,編譯的時候就會報錯。
而PHP作為弱類型語言,雖然做了返回類型聲明這種優化,但是語言執行前不需要我們編譯,直接發布運行,也就不能做到go語言的“編譯報警”了,PHP會在執行的時候直接拋出異常。
<?php declare(strict_types=1); function returnIntValue(int $value): int { return $value; } print(returnIntValue(5)); ?>
以上程序執行輸出結果為:5
返回類型聲明錯誤示例
<?php declare(strict_types=1); function returnIntValue(int $value): int { return $value + 3.0; } print(returnIntValue(1)); ?>
以上程序由于采用了嚴格模式,返回值必須是 int,但是計算結果是float,導致報錯,執行輸出結果為:Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...
void 函數
注意:定義返回類型為 void 的函數不能有返回值,即使返回 null 也不行。
返回值聲明為 void 類型的方法要么干脆省去 return 語句,要么使用一個空的 return 語句。
實例
<?php function exchange(&$left, &$right) : void { if ($left === $right) { return; } $tmp = $left; $left = $right; $right = $tmp; } $a = 1; $b = 2; var_dump(exchange($a, $b), $a, $b);
以上實例輸出結果:
null int(2) int(1)
關于“PHP類型聲明特性實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。