isset與is_null有什么不同?針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
在南昌等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都全網(wǎng)營銷,外貿(mào)網(wǎng)站制作,南昌網(wǎng)站建設(shè)費(fèi)用合理。isset和is_null啥區(qū)別,
看手冊上講的話, isset和is_null的功能幾乎完全”相反的一樣”..
是不是isset就是一個(gè)is_null的相反的別名?
誒, 要說區(qū)別, 那還真的是很多~
一切的不同都是因?yàn)? is_null是函數(shù), isset是語句.
isset是語句, 和echo, print一樣, 是PHP本身的一種語言結(jié)構(gòu).
而is_null是函數(shù), 和我們一般的函數(shù)一樣, 可以做為可變函數(shù)調(diào)用.
你也許會說, 好了,好了,我知道函數(shù)和語句的區(qū)別, 但到底是TMD什么區(qū)別?
誒, 所謂語句,語言結(jié)構(gòu), 就是說, 是語言本身支持的語句, 標(biāo)識符.
比如, for, foreach, continue 等等, 它們在語法分析的時(shí)刻就被”抹掉”(邏輯上替代了)了.
讓我們看看isset這個(gè)語句在語法分析的過程中, 是如何被”抹掉”的.
1. 首先, 在詞法分析的時(shí)候, isset會被識別為T_ISSET標(biāo)識符.
2. 而在語法分析階段, isset($var)這個(gè)指令, 會被分析成一條Opcode:ZEND_ISSET_ISEMPTY_VARS.
你可以理解isset就想C語言里面的宏, 在編譯/執(zhí)行之前已經(jīng)被展開了.
因?yàn)檫@個(gè), 所以在表現(xiàn)上, 會有如下的不同:
因?yàn)閕s_null是函數(shù), 所以它可以通過如下方式調(diào)用:
復(fù)制代碼 代碼如下:
$var = NULL;
$func = "is_null";
$func($var);
?>
而, isset因?yàn)槭钦Z句, 所以不能這樣調(diào)用.
因?yàn)閕s_null是函數(shù), 所以它可以接受函數(shù)返回值做為參數(shù), 而isset不行(當(dāng)然, 如果PHP想支持, 其實(shí)也是可以的, 只不過就要增加編譯階段的復(fù)雜度了):
復(fù)制代碼 代碼如下:
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的缺點(diǎn)了, 說點(diǎn)它的優(yōu)點(diǎn)吧:
因?yàn)閕sset是語句, 所以它快!
在一千萬次的簡單檢測語句循環(huán)中, 對比結(jié)果如下:
復(fù)制代碼 代碼如下:
$a="laruence":
isset($a); //用時(shí): 1.15s
is_null($a); //用時(shí): 3.89s
?>
因?yàn)閕sset叫做isset, 所以它在檢測未定義變量的時(shí)候, 不會產(chǎn)生NOTICE:
復(fù)制代碼 代碼如下:
isset($laruence);
//OK
is_null($laruence);
//PHP Notice: Undefined variable: laruence
?>
那么, 對于什么時(shí)候用isset什么時(shí)候用is_null, 我有什么建議呢?
誒, 我的建議是, 用函數(shù)做函數(shù)應(yīng)該做的事情~, 聽起來象廢話?
isset => is set? => 變量有沒有被賦值(聲明)
is_null => is null? => 變量為NULL么?
另外, 如果要用is_null, 我建議使用 “=== NULL” 來代替, 它不僅語義和is_null一致, 結(jié)果一致, 速度還和isset差不多:
在一千萬次的簡單檢測語句循環(huán)中, 對比結(jié)果如下:
復(fù)制代碼 代碼如下:
$a="laruence":
isset($a); //用時(shí): 1.15s
is_null($a); //用時(shí): 3.88s
$a===NULL; //用時(shí): 1.22s
?>
關(guān)于isset與is_null有什么不同問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。