web-dev-qa-db-ja.com

PHPのダブルNOT(!!)演算子

PHPでdouble not演算子は何をしますか?

例えば:

return !! $row;

上記のコードは何をしますか?

176
Andrei

「二重not演算子」ではなく、not演算子が2回適用されます。権利 !は、オペランドに関係なく、ブール値になります。次に、左!はそのブール値を無効にします。

これは、真の値(ゼロ以外の数字、空ではない文字列や配列など)についてはブール値TRUEを取得し、偽の値(0、0.0、NULL、空の文字列または空の配列)ブール値FALSEを取得します。

機能的には、booleanへのキャストと同等です。

return (bool)$row;
270
Theo

Boolへのキャストと同じ(またはほぼ同じ-いくつかのコーナーケースがあるかもしれません)。 $rowはtrueにキャストされ、その後!! $rowも真です。

ただし、(bool) $row、おそらくそれだけを使用する必要があります-「興味深い」式ではありません;)

50
viraptor

$rowには truthy 値があり、trueを返します。それ以外の場合はfalseを返し、ブール値に変換します。

以下は、PHPドキュメントからブール式への変換の式の例です。

Expression             Boolean
$x = "";               FALSE
$x = null;             FALSE
var $x;                FALSE
$x is undefined        FALSE
$x = array();          FALSE
$x = array('a', 'b');  TRUE
$x = false;            FALSE
$x = true;             TRUE
$x = 1;                TRUE
$x = 42;               TRUE
$x = 0;                FALSE
$x = -1;               TRUE
$x = "1";              TRUE
$x = "0";              FALSE
$x = "-1";             TRUE
$x = "php";            TRUE
$x = "true";           TRUE
$x = "false";          TRUE
17
YOU

「not not」は、多くの言語で、式の結果に言語が割り当てる真理値を理解するための便利な方法です。たとえば、 Python

>>> not not []
False
>>> not not [False]
True

複雑な値を「値はありますか?」のようなものに減らしたい場所では便利です。

7
Steve Bennett

別のもっと人間的な、おそらくもっと単純な、「読む」方法ではない:

  • 最初 '!' 2つのことを行います。値をブール値に「変換」し、その逆を出力します。そのため、値が「偽」の場合はtrueになります。

  • 二番目 '!'最初の反対を出力するだけです。

したがって、基本的に、入力値は任意の文字列にすることができますが、ブール値の出力が必要なため、最初の「!」を使用します。この時点で、入力値が「偽」であるときにTRUEにする場合は、ここで停止して、単一の「!」を使用します。それ以外の場合、入力値が「真」のときにTRUEにする場合は、別の「!」を追加します。

1
Luca Reghellin