はじめに
PHP
のコードを読んでいて謎の比較演算子==!
を発見したので調べてみた。
普通否定の比較をする際は!=
or !==
- そもそもこんな演算子はない
- だがエラーにならない謎
調査1(整数比較)
いくつかパターンを出して調べてみた。
サンプルコードは以下
not_equal1.php
<?php
if(1 === 1){
echo("1 === 1はtrueです\n");
} else {
echo("1 === 1はfalseです\n");
}
if(1 !== 1){
echo("1 !== 1はtrueです\n");
} else {
echo("1 !== 1はfalseです\n");
}
// 問題の比較演算子
if(1 ==! 1){
echo("1 ==! 1はtrueです\n");
} else {
echo("1 ==! 1はfalseです\n");
}
結果
1 === 1はtrueです
1 !== 1はfalseです
1 ==! 1はfalseです
エラーにならないし否定演算子と同じ結果になっている・・・おかしい・・・
調査2(bool値比較)
ふと気になってbool値で比較してみた。
not_equal2.php
<?php
if(true ==! false){
echo("true ==! falseはtrueです\n");
} else {
echo("true ==! falseはfalseです\n");
}
// 試しにイコールの数を増やしてみる
if(true ===! false){
echo("true ===! falseはtrueです\n");
} else {
echo("true ===! falseはfalseです\n");
}
// これはエラーになる
//if(true ====! false){
// echo("true ===! falseはtrueです\n");
//} else {
// echo("true ===! falseはfalseです\n");
//}
結果
true ==! falseはtrueです
true ===! falseはtrueです
謎の演算子===!
が成立した。
しかし====!
は成立しなかった。
結論
つまりこういうことだと認識した。
not_equal3.php
<?php
// つまりこういうこと
if(true == !false){
echo("true === !falseはtrueです\n");
} else {
echo("true === !falseはfalseです\n");
}
if(true === !false){
echo("true === !falseはtrueです\n");
} else {
echo("true === !falseはfalseです\n");
}
結果
true === !falseはtrueです
true === !falseはtrueです
==!
は==
の比較演算をして、後ろの要素を!
で否定させているという意味。
===!
は===
の比較で、後ろを!
で否定している。
だから====!
はエラーになった(====
という演算子はないため)
なるほどすっきり