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);
?>
復制代碼 代碼如下:
<?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
?>
復制代碼 代碼如下:
<?php
$a="laruence":
isset($a); //用時: 1.15s
is_null($a); //用時: 3.89s
?>
復制代碼 代碼如下:
<?php
isset($laruence);
//OK
is_null($laruence);
//PHP Notice: Undefined variable: laruence
?>
復制代碼 代碼如下:
<?php
$a="laruence":
isset($a); //用時: 1.15s
is_null($a); //用時: 3.88s
$a===NULL; //用時: 1.22s
?>
新聞熱點
疑難解答