В PHP:
$var = NULL;
Что здесь случилось? Был ли NULL присвоен $ var или был создан $ var с неизвестным значением, потому что назначение NULL ничего не делает?
Рассмотрим цикл for
$arr=array(); for($i=0;$arr[$i]=NULL;$i++){}
что нарушает это условие. Это должно означать, что назначение NULL оценивается как FALSE, что означает, что присваивание никогда не происходило и значение $ arr [0] не определено. Var_dump просто дал бы
array(1) { [0]=> NULL }
но я никогда не был уверен, что с этим делать. Из моих рассуждений с помощью цикла for выше я бы предположил, что NULL в PHP означает «неопределенный», но до сих пор я всегда считал, что NULL – это тип, который можно назначить. Если NULL действительно можно назначить, то цикл for не должен прерываться, поскольку присвоение NULL имеет значение TRUE.
Чтение http://php.net/manual/en/types.comparisons.php кажется, что NULL каким-то образом определяется, потому что строгое сравнение NULL и array () – FALSE, что хорошо, но неплохое сравнение TRUE. Для меня это означает, что NULL на самом деле является чем-то, а не неопределенным.
Мне кажется, что NULL не совсем последователен.
МОЙ ВОПРОС ДЛЯ ВАС: Что не так с моей логикой?
$var = NULL;
Что здесь случилось?
Простой: значение null
было присвоено $var
.
Да, значение null
– это значение. Регулярное, нормальное значение. null
не является логическим, а не числом, а не чем-либо еще. null
имеет тип null
, который может принимать только одно возможное значение: null
. null
обычно используется в качестве значения-заполнителя для обозначения «нет значения». Но null
– это просто нормальное значение и тип сам по себе. Здесь ничего не видно, двигайтесь вперед.
for ($i = 0; $arr[$i] = NULL; $i++) { }
Здесь null
присваивается $arr[$i]
на первой итерации. Выражение присваивания затем возвращает назначенное значение, т. Е. ($arr[$i] = NULL)
оценивает значение null
. Затем цикл for
вычисляет этот null
чтобы решить, следует ли продолжать или нет, и поскольку значение null
считается равным false
, оно останавливается. Результатом этого цикла является:
array(1) { [0]=> NULL }
Т.е. массив, первым и единственным индексом которого является значение null
. Ни больше ни меньше.
Если NULL действительно можно назначить, то цикл for не должен прерываться, поскольку присвоение NULL имеет значение TRUE.
Это ваше единственное непонимание. Результатом выражения присваивания является назначенное значение . true
. Вот почему это работает:
$a = $b = $c;
$a
присваивается результат $b = $c
, который равен $c
.
Во всех этих примерах вы можете заменить null
на false
для того же самого эффекта.