PHP の値の等価性
このページは、PHP の値の等価性についてまとめる予定のページです。
目次
用語
falsy
if ($x)
などで false
として判定される値のこと (下記の値)。
false
0
,0.0
,-0.0
- 空文字列 (
''
) '0'
- 空の配列 (
[]
) null
- 子要素も属性もない SimpleXML オブジェクト
(simplexml_load_string('')
,new SimpleXMLElement('<x/>')
,new SimpleXmlIterator('<x/>')
など)
empty()
で true
になる値も上記と同じです。(= !empty(上記の値)
と (bool)上記の値
は同じ)
等価演算子 (==)
2つの値の型が異なる場合、型変換を行って2つの値が等価かを確認する演算子。
厳密等価演算子 (===)
型変換を行わずに2つの値が等価かを確認する演算子。
等価演算子の例
var_dump(null == ''); // -> (string)null == '' -> '' === ''
var_dump(null == 0); // -> (bool)null == (bool)0 -> false === false
var_dump('00000' == 0); // -> (int)'00000' === 0 -> 0 === 0
var_dump('0e0' == 0); // -> (int)'0e0' === 0 -> 0 === 0
var_dump('0e0' == '0'); // -> (int)'0e0' === (int)'0' -> 0 === 0
var_dump('0001' == '1e0'); // -> (int)'0001' === (int)'1e0' -> 1 === 1
var_dump('1234' == ' 1234'); // (※先頭に空白がある数値形式の文字列) -> (int)'1234' === (int)' 1234' -> 1234 === 1234
var_dump([1,2,3] == [1,2,3]);
var_dump([1] == ['1']); // -> [1] === [1]
var_dump(simplexml_load_string('') == 0); // -> (int)simplexml_load_string('') === 0 ?
var_dump(simplexml_load_string('<a/>') == 0); // -> (int)simplexml_load_string('<a/>') === 0 ?
var_dump(simplexml_load_string('<a>0</a>') == 0); // -> (int)simplexml_load_string('<a>0</a>') === 0 ?
var_dump('' == 0); // -> (int)'' == 0 -> 0 === 0
var_dump('a' == 0); // -> (int)'a' == 0 -> 0 === 0
※1 PHP 8 で等価演算子の仕様が変更になったため (文字列と数値の比較のとき、文字列が数値形式の文字列ではない場合数値に変換されない。PHP 8 未満では数値形式の文字列ではなくても数値に変換されていた)
var_dump('1234' == '1234 '); // (※末尾に空白がある数値形式の文字列) -> (int)'1234' === (int)'1234 ' -> 1234 === 1234
※2 文字列同士の比較の場合、2つの値がともに数値形式の文字列ではない場合は通常の文字列比較 ('a' == 'b'
などと同じ) になるが、PHP 8 になって数値形式の文字列とみなされる文字列の仕様変更があったため
(数値形式 + 末尾に空白類、のケースが数値形式の文字列とみなされるようになった。PHP 8 未満では先頭に空白類 + 数値形式、のケースのみ数値形式の文字列とみなされていた)
値が 0 か '0' のとき true にする
if ($x === 0 || $x === '0')
値が空文字列のとき true にする
if ($x === '')
値が null のとき true にする
if ($x === null)
if (is_null($x))