PHPでdouble not演算子は何をしますか?
例えば:
return !! $row;
上記のコードは何をしますか?
PHPでdouble not演算子は何をしますか?
例えば:
return !! $row;
上記のコードは何をしますか?
回答:
これは「double not演算子」ではなく、2回適用されるnot演算子です。右に!
すると、オペランドに関係なくブール値になります。次に、左!
はそのブール値を否定します。
つまり、真の値(ゼロ以外の数値、空でない文字列と配列など)の場合はブール値が取得さTRUE
れ、偽の値(0、0.0 、、NULL
空の文字列または空の配列)の場合は取得されます。ブール値FALSE
。
これは、機能的に次のキャストと同等boolean
です。
return (bool)$row;
!!
等しいと見なし(bool)
ますか?または、どちらを使用するかによって異なるマシンコードが実行されますか?
!value
であり、偶数のbangがある場合、と同じ(bool) value
です。
boolにキャストするのと同じ(またはほぼ同じ-いくつかのコーナーケースがあるかもしれません)。場合$row
でしょうがtrueにキャストし、その後!! $row
も同様です。
しかし、達成したい(bool) $row
場合は、おそらくそれだけを使用し、「興味深い」式は使用しないでください;)
!!
は、C(++)でのプログラミングに残る習慣です。Cでは、キャストを行うのはPHPほど簡単ではありません。さまざまな問題が発生したり、警告がコンパイルされたりする可能性があり!!
ます。したがって、を使用してキャストすることはできません。
operator!
オーバーロード可能であるため、それを使用C++
すると危険です。また、Cで構造体をキャストしたり!
、それらを使用したりすることはできません。また、何かを否定できる場合は、intを返す関数からそれを返すことができる可能性が高く、これはほとんどブール値になります。Cの話をしているのですか?
!!
あなたが主張したように「興味深い」ものではありません。CからJavaScriptに至るまで、あらゆる場所にあります。
つまり$row
、真の値がある場合はを返しtrue
、それ以外の場合false
はブール値に変換します。
これは、php docsからブール変換への式の例です。
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
「ない」は、言語が式の結果に割り当てる真理値を理解するために、多くの言語で便利な方法です。たとえば、Pythonでは次のようになります。
>>> not not []
False
>>> not not [False]
True
複雑な値を「値はありますか?」のような値に減らしたい場合に便利です。
別のより人間的な、おそらくより簡単な、「読まない」方法:
最初 '!' 2つのことを行います:値をブール値に「変換」してから、その反対を出力します。したがって、値が「偽の」値である場合はtrueになります。
二番目 '!' 最初のものの反対を出力するだけです。
つまり、基本的に、入力値は何でもかまいませんが、文字列かもしれませんが、ブール出力が必要なので、最初の '!'を使用します。この時点で、入力値が 'falsy'のときにTRUEにしたい場合は、ここで停止し、単一の '!'を使用します。それ以外の場合、入力値が「truthy」のときにTRUEにしたい場合は、別の「!」を追加します。
return (bool) $row;