PHP Conference Japan 2024

is_null

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

is_null 判斷變數是否為 null

說明

is_null(混合 $value): 布林值

判斷給定的變數是否為 null

參數

value

要評估的變數。

傳回值

如果 valuenull,則傳回 true,否則傳回 false

範例

範例 #1 is_null() 範例

<?php

error_reporting
(E_ALL);

$foo = NULL;
var_dump(is_null($inexistent), is_null($foo));

?>
Notice: Undefined variable: inexistent in ...
bool(true)
bool(true)

另請參閱

新增註釋

使用者貢獻的註釋 5 則註釋

Malfist
16 年前
微優化是不值得的。

你必須執行一千萬次才能注意到差異,略多於 2 秒

$a===NULL; 花費時間:1.2424390316 秒
is_null($a); 花費時間:3.70693397522 秒

差異 = 2.46449494362
差異 / 10,000,000 = 0.000000246449494362

===NULL 和 is_null 的執行時間差異不到 250 奈秒。去優化一些重要的事情吧。
george at fauxpanels dot com
16 年前
看看 PHP 如何解析不同的值。$var 是變數。

$var = NULL "" 0 "0" 1

strlen($var) = 0 0 1 1 1
is_null($var) = TRUE FALSE FALSE FALSE FALSE
$var == "" = TRUE TRUE TRUE FALSE FALSE
!$var = TRUE TRUE TRUE TRUE FALSE
!is_null($var) = FALSE TRUE TRUE TRUE TRUE
$var != "" = FALSE FALSE FALSE TRUE TRUE
$var = FALSE FALSE FALSE FALSE TRUE

Peace!
contact dot 01834e2c at renegade334 dot me dot uk
9 年前
在 PHP 7 (phpng) 中,`is_null` 實際上比 `===` 略快,儘管兩者之間的效能差異非常小。

PHP 5.5.9
is_null - float(2.2381200790405)
=== - float(1.0024659633636)
=== 每次呼叫快約 100 奈秒

PHP 7.0.0-dev (built: May 19 2015 10:16:06)
is_null - float(1.4121870994568)
=== - float(1.4577329158783)
is_null 每次呼叫快約 5 奈秒
ahamilton9
2 年前
2022 年在 PHP 8.1 上的快速測試確認仍然沒有必要對 NULL 檢查進行微優化

<?php

// 比較運算子
$before = microtime(true);
$var = null;
for (
$i=0 ; $i<1000000000 ; $i++) {
if(
$var === null) {}
}
$after = microtime(true);
echo
' ===: ' . ($after - $before) . " 秒\n";

// 函式
$before = microtime(true);
$var = null;
for (
$i=0 ; $i<1000000000 ; $i++) {
if(
is_null($var)) {}
}
$after = microtime(true);
echo
'is_null: ' . ($after - $before) . " 秒\n";

// ===: 4.1487579345703 秒
// is_null: 4.1316878795624 秒
ai dot unstmann at combase dot de
16 年前
據我所知,`is_null($var)` 的回傳值與 `isset($var)` 完全相反,但如果 `$var` 尚未設定,`is_null($var)` 會拋出一個通知。

以下將證明這一點

<?php

$quirks
= array(null, true, false, 0, 1, '', "\0", "unset");

foreach(
$quirks as $var) {
if (
$var === "unset") unset($var);

echo
is_null($var) ? 1 : 0;
echo isset(
$var) ? 1 : 0;
echo
"\n";
}

?>

這會印出類似以下的結果

10 // null
01 // true
01 // false
01 // 0
01 // 1
01 // ''
01 // "\0"
注意:變數未定義:在 /srv/www/htdocs/sandbox/null/nulltest.php 的第 8 行,變數 $var 未定義
10 // (unset)

對於主要的特殊類型/值,`is_null($var)` 顯然總是返回與 `isset($var)` 相反的結果,而且該注意事項清楚地指出有問題的 `is_null()` 陳述式所在的行數。您可能需要詳細檢查這些函式的返回值,但由於兩者都被指定為返回布林值類型,因此應該沒有疑問。

再次查看 PHP 規格說明,`is_null()` 會檢查值是否為 null。因此,您可以傳遞任何「值」給它,例如函式的結果。
另一方面,`isset()` 應該檢查「變數」是否存在,這使得它成為一種語言結構而不是函式。它的唯一目的是進行該檢查。傳遞任何其他內容都會導致錯誤。

知道這一點,讓我們可以得出以下不太可能的結論

`isset()` 作為一種語言結構,比 `is_null()` 更快、更可靠且更強大,因此應該優先使用 `isset()`,除非您直接傳遞函式的結果,這無論如何都被認為是不良的程式設計習慣。
To Top