Является ли значение по умолчанию значением null равным нулю по умолчанию?
И могу ли я, таким образом, безопасно реорганизовать все экземпляры
class Blah
{
// ...
private $foo = null;
// ...
}
к
class Blah
{
// ...
private $foo;
// ...
}
?
Ответы
Ответ 1
Простой ответ, да. См. http://php.net/manual/en/language.types.null.php
Специальное значение NULL представляет собой переменную без значения. NULL - единственное возможное значение типа null.
Вы можете легко протестировать, выполнив var_dump()
в свойстве, и вы увидите, что оба экземпляра будут NULL
class Blah1
{
private $foo;
function test()
{
var_dump($this->foo);
}
}
$test1 = new Blah1();
$test1->test(); // Outputs NULL
class Blah2
{
private $foo = NULL;
function test()
{
var_dump($this->foo);
}
}
$test2 = new Blah2();
$test2->test(); // Outputs NULL
Ответ 2
Является ли значение по умолчанию значением null равным нулю по умолчанию?
Да
в соответствии с документами: Специальное значение NULL
представляет переменную без значения.
NULL
- это понятие переменной, которая не была задана никаким конкретным значением. Ошибочно ошибаться при дифференциации значений NULL
и пустых 1.
private $foo = null;
в точности эквивалентен private $foo;
. В обоих случаях атрибут класса определяется со значением NULL
.
isset
будет правильно возвращать false
для обеих объявлений $foo
; isset
является булевым, противоположным is_null
, и эти значения, как указано выше, NULL
.
Для справки рекомендую просмотреть таблицы сравнения типов PHP.
1: В этом случае я имею в виду типизированные значения, которые возвращают true для функции empty
или которые иначе считаются "ложными". И.Е. NULL
, 0
, false
, пустой массив (array()
) и пустая строка (''
). '0'
также технически пуст, хотя я считаю, что это странность PHP как языка.