PHPでdouble not演算子は何をしますか?
例えば:
return !! $row;
上記のコードは何をしますか?
「二重not演算子」ではなく、not演算子が2回適用されます。権利 !
は、オペランドに関係なく、ブール値になります。次に、左!
はそのブール値を無効にします。
これは、真の値(ゼロ以外の数字、空ではない文字列や配列など)についてはブール値TRUE
を取得し、偽の値(0、0.0、NULL
、空の文字列または空の配列)ブール値FALSE
を取得します。
機能的には、boolean
へのキャストと同等です。
return (bool)$row;
Boolへのキャストと同じ(またはほぼ同じ-いくつかのコーナーケースがあるかもしれません)。 $row
はtrueにキャストされ、その後!! $row
も真です。
ただし、(bool) $row
、おそらくそれだけを使用する必要があります-「興味深い」式ではありません;)
$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
「not not」は、多くの言語で、式の結果に言語が割り当てる真理値を理解するための便利な方法です。たとえば、 Python :
>>> not not []
False
>>> not not [False]
True
複雑な値を「値はありますか?」のようなものに減らしたい場所では便利です。
別のもっと人間的な、おそらくもっと単純な、「読む」方法ではない:
最初 '!' 2つのことを行います。値をブール値に「変換」し、その逆を出力します。そのため、値が「偽」の場合はtrueになります。
二番目 '!'最初の反対を出力するだけです。
したがって、基本的に、入力値は任意の文字列にすることができますが、ブール値の出力が必要なため、最初の「!」を使用します。この時点で、入力値が「偽」であるときにTRUEにする場合は、ここで停止して、単一の「!」を使用します。それ以外の場合、入力値が「真」のときにTRUEにする場合は、別の「!」を追加します。