PHPにおける値と型の等価性
引用符付きの数値と引用符なしの同じ数値が等しくならないように比較したいとします。言い換えれば、値だけでなくデータ型も考慮した比較を行いたい場合です。そのためには、演算子 == の代わりに演算子 === を使用する必要があります。この演算子による比較は、厳密な比較と呼ばれます。
例を見てみましょう:
<?php
if ('3' === 3) {
echo '+++';
} else {
echo '---'; // 型が異なるためこちらが実行される
}
?>
一方、2つの文字列 '3' を比較すると、画面上には '+' が表示されます:
<?php
if ('3' === '3') {
echo '+++'; // こちらが実行される
} else {
echo '---';
}
?>
数値の比較でも同様です:
<?php
if (3 === 3) {
echo '+++'; // こちらが実行される
} else {
echo '---';
}
?>
2つの演算子の違いは、値が同じでデータ型が異なる場合に明らかになります。それ以外の場合、これらの演算子は同じように動作します。例えば、異なる数値を比較すると、当然マイナス記号が表示されます:
<?php
if (2 === 3) {
echo '+++';
} else {
echo '---'; // こちらが実行される
}
?>
現在のPHPでは、厳密な比較をどこでも使用することが一般的です。 この方がコードのエラーが起こりにくいと考えられています。
コードを実行せずに、画面に何が表示されるか判断してください:
<?php
$test1 = '3';
$test2 = '3';
if ($test1 == $test2) {
echo '+++';
} else {
echo '---';
}
?>
コードを実行せずに、画面に何が表示されるか判断してください:
<?php
$test1 = '3';
$test2 = '3';
if ($test1 === $test2) {
echo '+++';
} else {
echo '---';
}
?>
コードを実行せずに、画面に何が表示されるか判断してください:
<?php
$test1 = 3;
$test2 = '3';
if ($test1 == $test2) {
echo '+++';
} else {
echo '---';
}
?>
コードを実行せずに、画面に何が表示されるか判断してください:
<?php
$test1 = 3;
$test2 = '3';
if ($test1 === $test2) {
echo '+++';
} else {
echo '---';
}
?>
コードを実行せずに、画面に何が表示されるか判断してください:
<?php
$test1 = 3;
$test2 = 3;
if ($test1 === $test2) {
echo '+++';
} else {
echo '---';
}
?>