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

溫馨提示×

溫馨提示×

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

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

isset與is_null有什么不同

發布時間:2020-12-29 16:30:58 來源:億速云 閱讀:178 作者:Leah 欄目:開發技術

isset與is_null有什么不同?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

isset和is_null啥區別,
看手冊上講的話, isset和is_null的功能幾乎完全”相反的一樣”..
是不是isset就是一個is_null的相反的別名?
誒, 要說區別, 那還真的是很多~

一切的不同都是因為: is_null是函數, isset是語句.
isset是語句, 和echo, print一樣, 是PHP本身的一種語言結構.
而is_null是函數, 和我們一般的函數一樣, 可以做為可變函數調用.
你也許會說, 好了,好了,我知道函數和語句的區別, 但到底是TMD什么區別?
誒, 所謂語句,語言結構, 就是說, 是語言本身支持的語句, 標識符.
比如, for, foreach, continue 等等, 它們在語法分析的時刻就被”抹掉”(邏輯上替代了)了.
讓我們看看isset這個語句在語法分析的過程中, 是如何被”抹掉”的.

1. 首先, 在詞法分析的時候, isset會被識別為T_ISSET標識符.
2. 而在語法分析階段, isset($var)這個指令, 會被分析成一條Opcode:ZEND_ISSET_ISEMPTY_VARS.

你可以理解isset就想C語言里面的宏, 在編譯/執行之前已經被展開了.
因為這個, 所以在表現上, 會有如下的不同:
因為is_null是函數, 所以它可以通過如下方式調用:

復制代碼 代碼如下:


<?php
$var = NULL;
$func = "is_null";
$func($var);
?>


而, isset因為是語句, 所以不能這樣調用.
因為is_null是函數, 所以它可以接受函數返回值做為參數, 而isset不行(當然, 如果PHP想支持, 其實也是可以的, 只不過就要增加編譯階段的復雜度了):

復制代碼 代碼如下:


<?php
is_null(intval("0x45"));
//OK
isset(intval("0x45"));
//PHP Fatal error: Can't use function return value in write context
is_null(NULL);
//OK
isset(NULL);
//PHP Parse error: syntax error
?>


說了這么多isset的缺點了, 說點它的優點吧:
因為isset是語句, 所以它快!
在一千萬次的簡單檢測語句循環中, 對比結果如下:

復制代碼 代碼如下:


<?php
$a="laruence":
isset($a); //用時: 1.15s
is_null($a); //用時: 3.89s
?>


因為isset叫做isset, 所以它在檢測未定義變量的時候, 不會產生NOTICE:

復制代碼 代碼如下:


<?php
isset($laruence);
//OK
is_null($laruence);
//PHP Notice: Undefined variable: laruence
?>


那么, 對于什么時候用isset什么時候用is_null, 我有什么建議呢?
誒, 我的建議是, 用函數做函數應該做的事情~, 聽起來象廢話?
isset => is set? => 變量有沒有被賦值(聲明)
is_null => is null? => 變量為NULL么?
另外, 如果要用is_null, 我建議使用 “=== NULL” 來代替, 它不僅語義和is_null一致, 結果一致, 速度還和isset差不多:
在一千萬次的簡單檢測語句循環中, 對比結果如下:

復制代碼 代碼如下:


<?php
$a="laruence":
isset($a); //用時: 1.15s
is_null($a); //用時: 3.88s
$a===NULL; //用時: 1.22s
?>

關于isset與is_null有什么不同問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

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

AI

富裕县| 遵义县| 正宁县| 公主岭市| 林周县| 洪湖市| 涟源市| 东乌珠穆沁旗| 壶关县| 冷水江市| 进贤县| 新丰县| 佳木斯市| 德兴市| 兴宁市| 横山县| 丰原市| 伊春市| 金寨县| 万盛区| 德州市| 道孚县| 仙桃市| 云阳县| 会昌县| 鄂托克前旗| 黄骅市| 达日县| 会同县| 山西省| 岗巴县| 龙山县| 娱乐| 偃师市| 西城区| 旬邑县| 濮阳市| 威信县| 海兴县| 德安县| 浦北县|