PHP: Назначение NULL переменной, TRUE или FALSE? Что такое NULL?

В 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 для того же самого эффекта.