Note: empty array is converted to null by non-strict equal '==' comparison. Use is_null() or '===' if there is possible of getting empty array.
$a = array();
$a == null <== return true
$a === null < == return false
is_null($a) <== return false
null 型は、PHP の unit 型 (意味のある情報を持たないことを示す型) です。
つまり、単一の値 null
しか持ちません。
未定義、そして unset()
された値は、値 null
に解決されます。
null 型の値は一つだけで、
大文字小文字を区別しない定数 null
です。
<?php
$var = NULL;
?>
null
へのキャスト
この機能は PHP 7.2.0 で 非推奨 になり、PHP 8.0.0 で 削除 されました。この機能に頼らないことを強く推奨します。
(unset) $var
を使って変数を null
にキャストすると、その変数を削除したり値の設定を解除したりは
しません。単に null
値を返すだけです。
Note: empty array is converted to null by non-strict equal '==' comparison. Use is_null() or '===' if there is possible of getting empty array.
$a = array();
$a == null <== return true
$a === null < == return false
is_null($a) <== return false
NULL is supposed to indicate the absence of a value, rather than being thought of as a value itself. It's the empty slot, it's the missing information, it's the unanswered question. It's not a jumped-up zero or empty set.
This is why a variable containing a NULL is considered to be unset: it doesn't have a value. Setting a variable to NULL is telling it to forget its value without providing a replacement value to remember instead. The variable remains so that you can give it a proper value to remember later; this is especially important when the variable is an array element or object property.
It's a bit of semantic awkwardness to speak of a "null value", but if a variable can exist without having a value, the language and implementation have to have something to represent that situation. Because someone will ask. If only to see if the slot has been filled.
I would like to add for clarification that:
$x=NULL;
--$x;
// $x is still NULL.
// Decrementing NULL, using Decrement Operator, gives NULL.
$x-=1;
// $x is now int(-1).
// This actually decrements value by 1.
On the other hand, Incrementation works simply as expected.
Hope this helps :)
Note: Non Strict Comparison '==' returns bool(true) for
null == 0 <-- returns true
Use Strict Comparison Instead
null === 0 <-- returns false
Note that NULL works like a magic object with any attribute you can name, but they are all NULL:
foreach ( [ null, null ] as $person ) {
$friends[] = [ 'Name'=>$person['name'], 'Phone'=>$person['cell'] ];
}
print_r($friends);
Array
(
[0] => Array
(
[Name] =>
[Phone] =>
)
[1] => Array
(
[Name] =>
[Phone] =>
)
)
This means that:
* NULL == NULL['foo']['bar']['whatever']
This can be slightly confusing if you accidentally slip a NULL into an array of other items.