У меня вопрос относительно использования is_null()
.
Я читал другие вопросы, посвященные is_null ($ x) по сравнению с null === $ x, но меня больше беспокоит, зачем вообще есть 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()
теперь не работает вообще. Как правильно это сделать, не показывая уведомлений?
После всего этого, могу ли я просто согласиться с тем, что уведомления бессмысленны и не должны отправляться в мой журнал ошибок, или есть какие-то другие предостережения, которые я должен учитывать?
В настоящее время мы очищаем старую систему от множества ошибок - мы не хотим ни одной пропустить, но также нет смысла создавать новые ошибки для себя. Также приветствуются любые ссылки на авторитетные источники по этому вопросу.
null
, и переменную, которая не определена. Это разные вещи. - person Jakub Matczak   schedule 03.03.2014$something = null; var_dump(isset($something));
выведетfalse
. Это не на самом деле выдает ошибку при использованииis_null
, если для него установлено значениеnull
. Странный. Или я глупый? - person LeonardChallis   schedule 03.03.2014