PHP 通過各種函式判斷0和空

2022-06-16 22:00:30 字數 1935 閱讀 3881

$cast_id = 0;

var_dump(strlen($cast_id)); //1

var_dump(empty($cast_id)); // true

var_dump(isset($cast_id)); //true

var_dump(is_null($cast_id));//false

$cast_id = "";

var_dump(strlen($cast_id)); //0

var_dump(empty($cast_id)); // true

var_dump(isset($cast_id)); //true

var_dump(is_null($cast_id));//false

曾經遇到這樣乙個問題是這樣的: php 語句裡,我想判斷乙個值大於等於0. 我是使用($value !=null && $value >=0), 返回的結果為空,這點真的好奇怪。

實驗總結:

php 語句如下:

$index=0;

echo "a: ".$index."

"; //0

echo "b: ".($index !=null && $index >=0)."

";//

echo "c: ".(isset($index) && $index >=0)."

";//1

echo "d: ".(0 !=null)."

";//

結果:

a: 0

b:c: 1

d:

要判斷乙個數值[該陣列可能為空等]大於等於0, 可用另外乙個方法:is_numeric($index) === true

$index=array_search($url, $contentlaofanstr, true);

//值大於等於0, 即存在

if(is_numeric($index) === true)

else

這個很奇怪,終於解決了。

總結:php的語句稍有些怪異,從其它程式語言轉來的同學們一定多加小心謹慎,注意慣性思維及語法差異點啊,避免陷入坑中。

原因是在php中變數是以c語言的結構體來儲存的,空字串和null,false都是以值為0儲存的,其中這個結構體有個zend_uchar type;這樣的成員變數,他是用來儲存變數的型別的,而空字串的型別是string,null的型別是null,false是boolean。

這一點可以用echo gettype('');和echo gettype(null);來列印看看!而===運算子是不單比較值,還有比較型別的,所以第三個為false!

另外再說下,php中

所以 空字串(''),false, null 和 0是值相等而型別不一樣!

注意:null是一種特殊的型別.

兩種情況下為null

$var = null;

$var;

""、0、"0"、null、false、array()、var $var; 以及沒有任何屬性的物件都將被認為是空的,如果 var 為空,則返回 true。

function test()

else

// 2、方法二

if ($a !== null) else

// 3、方法三

if (strlen($a) > 0) else

// 以上三種方法都只能把其中乙個和另外兩個區分出來,如果需要3個單獨區分,需要結合使用

}

html模板中判定

性別

php通過各種函式判斷0和空

函式對0的判斷12 345 cast id 0 var dump strlen cast id 1 var dump empty cast id true var dump isset cast id true var dump is null cast id false 對空的判斷12 345 c...

php判斷空值 PHP空值檢測函式與方法彙總

幾乎任何入口的http請求我們都會去檢測它攜帶的引數,類似 isset empty 的函式一定不少見。以下的測試結果基於 php7.16 是否定義判斷 isset 可以使用 isset 函式判斷乙個變數是否定義,陣列內某個元素是否被初始化,它的效率比 array key exists 高4倍左右 a...

PHP 型別判斷和NULL,空值檢查

php是一種寬鬆型別的程式語言,在函式中對傳入的引數值的 型別 以及 值是否為空或者null 進行檢查是不可缺少的步驟。從php5開始,php允許對函式的引數進行型別約束,即可以約束引數的型別為物件,介面,陣列 php 5.1開始 或者callable php5.4起 但是不可以約束引數型別為標量型...