我們先來復習一下empty和isset empty — 檢查一個變量是否為空 ""、0、"0"、NULL、FALSE、array()、var $var; 以及沒有任何屬性的對象都將被認為是空的,如果 var 為空,則返回 TRUE isset — 檢測變量是否設置 檢測變量是否設置,並且不是 NULL。 即:變量未設置,返回false; 變量為NULL,返回false php手冊解釋的比較清楚了,可如果一個變量未設置時,empty返回什麼結果呢? [php] var_dump(empty($undefined)); var_dump(empty($undefined));結果是:bool(true) 可見empty也可以起到檢測變量是否設置的目的。那麼該不該使用empty代替isset呢? 我覺得如果僅僅是判斷一個變量存不存在,那麼該使用isset,因為isset的含義很清晰,就是干這個用的,也利於對代碼的閱讀。 當既要判斷變量存在,又有判斷變量不為0,'',空數組等情況,可以用 [php] if(!empty($var)) 代替 if(isset($var) && !empty($var)) if(!empty($var)) 代替 if(isset($var) && !empty($var))當要判斷一個變量是否是NULL時,就必然不能使用isset了。 下面再來引申一些內容: isset和empty的性能? 其實isset和empty的性能都很好,差別不大。還要說一點是它們都是語句,不是函數,想要具體看一下這方面的內容的,可以看鳥哥的這篇文章《isset和is_null的區別》 語句是不能被可變函數調用的,此外,在isset和empty裡是不能接受函數的返回值當做參數的,比如這樣是不行的 [php] empty(intval('3')); //Fatal error: Can't use function return value in write context empty(intval('3')); //Fatal error: Can't use function return value in write context 但是,目前最新的PHP5.5的發布支持了這一特性,即能夠在empty中使用任意表達式: [php] function always_false() { return false; } if (empty(always_false())) { echo "This will be printed.\n"; } function always_false() { return false; } if (empty(always_false())) { echo "This will be printed.\n"; } 將輸出: This will be printed.