1. 程式人生 > >關於is_null() isset() empty() == ===的理解與筆記

關於is_null() isset() empty() == ===的理解與筆記

 

 

NULL:
當你在你的指令碼中寫下這樣一行程式碼

$myvariable; //此處你想定義一個變數,但未賦值。會有Notice: Undefined variable
echo $myvariable + 3; //使用這個變量出現:Notice: Undefined variable: myvariable in
如果將其改寫成:
$myvariable = NULL;
echo $myvariable + 3; //這樣就不會有問題了
所以得出在你的指令碼在使用一個變數時最好賦一個預設值,如果你不想,就可以將NULL賦給變數,表示這個變數已經定義但沒有值,屬於NULL型別。

is_null():
bool is_null ( mixed $var )   (php.net官方文件的函式定義)
當引數滿足下面三種情況時,is_null()將返回TRUE,其它的情況就是FALSE
1、它被賦值為NULL
2、它還沒有賦值(會報一個未定義變數提醒/警告)
3、它未定義,相當於unset(),將一個變數unset()後,不就是沒有定義嗎(會報一個未定義變數提醒/警告)
讓我們來看一些例子:
$myvar = NULL;
var_dump(is_null($myvar)); // TRUE
$myvar1;
var_dump(is_null($myvar1)); // TRUE Notice: Undefined variable


$num = 520;
unset($num);
var_dump(is_null($num)); //TRUE Notice: Undefined variable
var_dump(is_null($some_undefined_var)); //TRUE Notice: Undefined variable

$myvar = 0; is_null($myvar); // FALSE
$myvar = FALSE; is_null($myvar); // FALSE
$myvar = ''; is_null($myvar); // FALSE

isset():
bool isset ( mixed $var [, mixed $... ] ),引數是一個變數
檢測引數已設定,並且不是NULL。如果沒有設定變數,變數未賦值,或變數被設為NULL,isset()函式就返回NULL。
正好和is_null()函式相反,is_null()為TRUE的情況在isset()中就為FALSE

。有意思!
如果傳遞多個引數,將取交集。即所有引數全部符合 isset() 時才返回 TRUE。
似乎讓人感覺有點困惑,來看一些例子:
$myvar = NULL; isset($myvar); // FALSE 當一個變數被賦值為NULL時,就表示這個變數沒有值
$myvar = 0; isset($myvar); // TRUE
$myvar = FALSE; isset($myvar); // TRUE
$myvar = ''; isset($myvar); // TRUE
isset($some_undefined_var); // FALSE Undefined variable
可以看出isset()著重檢測一個 變數是否設定和這個變數是否有具體的值,當變數滿足這兩種情況時isset()返回TRUE

defined():
bool defined ( string $name )
檢測是否設定常量

empty():
bool empty ( mixed $var )
判讀變數是否為空
請見上面的型別比較表empty()那一列你就明白哪些情況是空的情形了。還有其他一些函式的參照。
來看一些例子:
$myvar = NULL; empty($myvar); // TRUE
$myvar = 0; empty($myvar); // TRUE
$myvar = FALSE; empty($myvar); // TRUE
$myvar = ''; empty($myvar); // TRUE
empty($some_undefined_var); // TRUE
empty()為TRUE的情況,若變數不存在,或者變數存在且其值為""、0、"0"、NULL、FALSE、array()、var $var; 以及沒有任何屬性的物件,則返回 TURE。
一般如!empty()的判斷,就是變數存在,且值不為""、0、"0"、NULL、FALSE、array()以及只是單純定義一個變數$var。
---------------------
轉自原文作者:jiaobuchong

原文連結:https://blog.csdn.net/jiaobuchong/article/details/41807011