在學習php有一段時間之後,感覺自己的基礎知識還是有點不牢固,有的問題就不怎麼知道,比如就有乙個,在判斷乙個變數是否為空的情況下,我就不知道是用isset()還是empty()。今天我就來分析該用哪個函式。
isset():用於判斷乙個函式是否被設定過,如果設定過就為true,否則就為false,但是有乙個例外,就是如果乙個變數被設定成null的話,此時也會返回的也是false。
<?php
$a = null;
var_dump(isset($a));//a變數已賦值,但是被設定成null,故返回false
var_dump(isset($b));//記憶體中不存在變數b,故返回false
var_dump(isset($_get['id']));//如果$_get['id']變數不存在,則返回false;如果$_get['id']存在,則返回true
?>
empty():用於判斷乙個變數是否為空,如果是整形的0,浮點型的0.0,字元型的』 『和』0』,還有布林型的false,null型的null,空陣列等
<?php
$a = null;
var_dump(empty($a));//true
$b = "";
var_dump(empty($b));//true
$c = "0";
var_dump(empty($b));//true
$c = 0;
var_dump(empty($b));//true
$e = false;
var_dump(empty($e));//true
$f = array();
var_dump(empty($f));//true
var_dump(empty($g));//$g變數不存在,返回true
var_dump(empty($_get['id']));//如果$_get['id']不存在,則返回true;如果存在,但是值是上述條件,則還是返回true。
?>
總結:如果是判斷乙個變數是否存在,可以用isset()和empty();如果判斷變數的值是否為空,那麼就用empty()。
注意:以前我在做專案的時候,出現了這樣的乙個問題,我把select下拉列表框的選中的值傳到伺服器,伺服器從超全域性陣列中獲取到了值,但是當時我不清楚isset()和empty()的區別,當時只知道他們都能判斷變數是否存在,結果我用了empty()函式,最後,就出現bug了,我用empty()進行判斷,把我傳過來的變數的值為0的情況就給排除了。
所有在這裡提醒大家,如果只是判斷變數是否為空,最好還是用isset()。
困擾我的c 語法
以下是我上週學習c primer的心得 c 允許將變數定義成陣列的引用,以下列 為例。形參為int arr 10 該引數需分成兩部分說明,引用名和 引用定義。引用名arr和 結合,表示其是乙個引用 和下標運算子結合,表示其是乙個陣列的引用 和int結合,表示其是乙個int型陣列的引用 值得注意的是,...
一直困擾我的問題
當解決乙個問題的時候,隨即引出幾個未知的問題。然後在解決那幾個問題時又引出更多的問題。導致問題就像一棵樹一樣,不斷往上生長。逐漸遠離最開始的問題。當然也在一層一層未解決的問題的影響下挫敗感越來越強烈。最後不得不停止 放棄。發現解決方法一 當在解決乙個不知道難度有多大的問題時,找一張紙,把最根本的要解...
PHP中奇葩的 , ,isset,empty
個人感覺,php中的關於判斷變數是否存在或者為空的語法設計是失敗的,分工不明確,界限不清楚,判斷起來很容易遺留漏洞,使用php開發5年多了,經常看到因為輸入引數問題導致的系統錯誤,即便是工作多年的phper,有人把這歸結為靈活,但是經驗越久越傾向於將函式設計的功能明確且單一,更傾向於確定性的東西,討...