LoginSignup
11
8

More than 5 years have passed since last update.

謎の演算子==!について

Posted at

はじめに

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です

==!==の比較演算をして、後ろの要素を!で否定させているという意味。
===!===の比較で、後ろを!で否定している。
だから====!はエラーになった(====という演算子はないため)

なるほどすっきり:smile:

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8