php isset和is_null區別

來源:互聯網
上載者:User

 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想支援, 其實也是可以的, 只不過就要增加編譯階段的複雜度了):

<?phpis_null(intval("0x45"));//OKisset(intval("0x45"));//PHP Fatal error:  Can't use function return value in write contextis_null(NULL);//OKisset(NULL);//PHP Parse error:  syntax error?>

說了這麼多isset的缺點了, 說點它的優點吧:

因為isset是語句, 所以它快!

在一千萬次的簡單檢測語句迴圈中, 對比結果如下:

<?php$a="laruence":isset($a);        //用時: 1.15165400505sis_null($a);//用時: 3.78501200676s?>

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

<?phpisset($laruence);//OKis_null($laruence);//PHP Notice:  Undefined variable: laruence?>

那麼, 對於什麼時候用isset什麼時候用is_null, 我有什麼建議呢?

誒, 我的建議是, 用函數做函數應該做的事情~, 聽起來象廢話?

isset => is set? => 變數有沒有被賦值(聲明)

is_null => is null? => 變數為空白麼?

另外, 如果要用is_null, 我建議使用 “=== NULL” 來代替, 它不僅語義和is_null一致, 結果一致, 速度還和isset差不多:

在一千萬次的簡單檢測語句迴圈中, 對比結果如下:

<?php$a="laruence":isset($a);        //用時: 1.15165400505sis_null($a);//用時: 3.78501200676s$a===NULL;         //用時: 1.21655392647s?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.