我的問題是關於使用is_null()
。is_null()的要點是什麼?
我讀過其他問題,討論,但我更關心爲什麼有一個is_null()
函數呢?
一些測試來解釋我的想法:
<?php
header('Content-type: text/plain');
error_reporting(-1);
$test = 'Hello, World!';
$test2 = null;
$test3 = '';
var_dump(is_null($test));
var_dump(null === $test);
var_dump(isset($test));
var_dump(is_null($test2));
var_dump(null === $test2);
var_dump(isset($test2));
var_dump(is_null($test3));
var_dump(null === $test3);
var_dump(isset($test3));
var_dump(is_null($test4));
var_dump(null === $test4);
var_dump(isset($test4));
這將產生以下輸出:
bool(false)
bool(false)
bool(true)
bool(true)
bool(true)
bool(false)
bool(false)
bool(false)
bool(true)
Notice: Undefined variable: test4 in C:\home\ombrelle.co.uk\templates_core\test.php on line 22
bool(true)
Notice: Undefined variable: test4 in C:\home\ombrelle.co.uk\templates_core\test.php on line 23
bool(true)
bool(false)
正如你所看到的,使用is_null()
功能或比較法時,它會拋出一個請注意,所以您不得不使用isset()
。所以從來沒有看到使用這些方法的通知的唯一方法是當它不是null
?
此外,還應考慮以下幾點:
<?php
header('Content-type: text/plain');
error_reporting(-1);
var_dump((is_null($test1)) ? 'test1' : $test);
var_dump((null == $test2) ? 'test2' : $test);
var_dump((isset($test3)) ? 'test3' : $test);
給下面的輸出:
Notice: Undefined variable: test1 in C:\home\ombrelle.co.uk\templates_core\test.php on line 6
string(5) "test1"
Notice: Undefined variable: test2 in C:\home\ombrelle.co.uk\templates_core\test.php on line 7
string(5) "test2"
Notice: Undefined variable: test in C:\home\ombrelle.co.uk\templates_core\test.php on line 8
NULL
在這裏,在三元聲明,上述工作中,仍然有通知,但是isset()
方法現在沒有按」 t工作。如何正確地進行此操作,而不顯示通知?
畢竟,我只是爲了接受通知是毫無意義的,不應該發送到我的錯誤日誌,或者是否還有其他注意事項我應該考慮?
我們目前正在清理一箇舊系統中存在很多錯誤 - 我們不想錯過任何錯誤,但也沒有意思爲我們自己創造更多錯誤。任何關於此事權威性閱讀的鏈接也都非常感謝。
看來你不辨具有'未定義null'價值和可變的變量。這些是不同的事情。 –
換句話說:is_null是一個函數,就像is_bool,is_int,is_。僅僅因爲null類型只有1個可能的值,所以它實際上等於=== null。這就像is_bool等於($ var === true或$ var === false)。比較中的一個不存在的變量被視爲一個沒有值的變量(即null),因此在null === $ undefined時返回true。但是,當將無變量作爲參數傳遞給函數時,函數不會收到任何內容,但它至少需要某些內容,因此會返回通知。 – Tularis
我覺得我這裏困惑的是'$ something = null; var_dump(isset($ something));'將輸出'false'。它不是*實際上*當使用'is_null'的時候會拋出錯誤,如果它被設置爲'null'的話。奇怪的。還是我很傻? – LeonardChallis