GlareVPN使用日本在地伺服器‧日本本地IP位址,述不能訪問日本國內網站的情形將通通消失。  [TGS2021] 到訪Capcom《魔物獵人》展位 騎上了1比1隨從加爾克!   動人的《Kena: Bridge of Spirits》預告片揭露新遊戲畫面與故事細節   David Goyer談論改編《基地》在Apple TV+ 播出   K/DA聯名商品!羅技宣布將推出英雄聯盟官方電競產品「KDA COLLECTION」   人偶劇「到BIO村玩吧♪」最終回大公開!《惡靈古堡8村莊》全球出貨量突破300萬套!   鷹眼將於3月18日加入《漫威復仇者聯盟》   《Resident Evil Village》:有請蒂米特雷斯庫女士的三個女兒   《對馬戰鬼》《魔物獵人崛起》同獲日本遊戲大賞2021年度首獎! 

PHP 強制使用「強型態」的模式

商業

PHP 7 之後,function、Class 等等都可以指定型態、回傳的型態,但是雖然寫 int,傳進來還是可以傳 float,要怎麼強制型態不對就直接出錯誤呢?

function 指定型態完整寫法


PHP 的型態:PHP: Type declarations

PHP 強制使用「強型態」的模式

型態已經指定 int、float 了,為何強型態要直接錯誤,而不是繼續執行呢?

下述範例可以參考看看:(範例取自此篇:php 7.2 - What do strict types do in PHP?)


在上述寫法,執行結果會是 3,而不是 3.4。這種情況更適合「直接錯誤」不要執行 (註:將所有型態 int、float 都拿掉,反而結果是正確的 3.4)。

要如何指定強型態,有錯誤的輸入、輸出直接噴錯誤呢?

PHP 7 之後,只要在程式的最上方宣告下述:

  • declare(strict_types = 1);

文件可見:

再來程式只要型態不對,就會直接報錯誤,如下述範例:

回傳型態錯誤


若 strict_types = 0,回傳值如下:

int(3)
int(3)

註:第二個原本應該是 float(3.5),回傳值被強制轉成整數回傳,所以變成 3

但是若 strict_types = 1,就會噴下述錯誤:

int(3)
PHP Fatal error:  Uncaught TypeError: Return value of sum() must be of the type integer, float returned in /tmp/test.php:5
Stack trace:
#0 /tmp/test.php(9): sum(1, 2.5)
#1 {main}
    thrown in /tmp/test.php on line 5

傳入型態錯誤


若 strict_types = 0,回傳值如下:

string(3) "123"

但是若 strict_types = 1,就會噴下述錯誤:

PHP Fatal error:  Uncaught TypeError: Argument 1 passed to get_string() must be of the type string, integer given, called in /tmp/test.php on line 8 and defined in /tmp/test.php:4
Stack trace:
#0 /tmp/test.php(8): get_string(12)
#1 {main}
   thrown in /tmp/test.php on line 4

相關網頁

Tsung

隨機商業新聞

NordVPN