1. ホーム
  2. php

[解決済み] "!==" と "==!" の違いについて [クローズド]

2022-04-24 20:57:13

質問

昨日、他の人が書いたPHPのコードを修正したときにつまずいた。単純な比較( if ($var ==! " ") が期待通りに動かなかった。いくつかのテストの後、そのコードを書いた人が ==! ではなく !== を比較演算子として使用します。私はこれまで ==! というわけで、このコードが一体どのように動作するのか不思議に思い、いくつかテストしてみました。

<?php
echo "int\n";
echo "1 !== 0: "; var_dump(1 !== 0);
echo "1 !== 1: "; var_dump(1 !== 1);
echo "1 ==! 0: "; var_dump(1 ==! 0);
echo "1 ==! 1: "; var_dump(1 ==! 1);
echo "bool\n";
echo "true !== false: "; var_dump(true !== false);
echo "true !== true: "; var_dump(true !== true);
echo "true ==! false: "; var_dump(true ==! false);
echo "true ==! true: "; var_dump(true ==! true);
echo "string\n";
echo '"a" !== " ": '; var_dump("a" !== " ");
echo '"a" !== "a": '; var_dump("a" !== "a");
echo '"a" ==! " ": '; var_dump("a" ==! " ");
echo '"a" ==! "a": '; var_dump("a" ==! "a");
?>

このように出力されます。

int
1 !== 0: bool(true)
1 !== 1: bool(false)
1 ==! 0: bool(true)
1 ==! 1: bool(false)
bool
true !== false: bool(true)
true !== true: bool(false)
true ==! false: bool(true)
true ==! true: bool(false)
string
"a" !== " ": bool(true)
"a" !== "a": bool(false)
"a" ==! " ": bool(false)
"a" ==! "a": bool(false)

この演算子は、ブーリアン変数や整数変数には使えるようですが、文字列には使えないようです。このため ==! PHP のドキュメントや検索エンジンにこの件に関する記述はありません (Google, Bing, DuckDuckGo を試してみましたが、文字列を検索するのではなく、解釈しようとしたのではないかと思われます)。どなたか、この動作を見たことがあり、この動作について何かわかる方はいらっしゃいますか?

解決方法は?

違いは、演算子がないことです。 ==! .

この式は

$a ==! $b

基本的にはこれと同じです。

$a == (!$b)