Was macht der Double Not Operator in PHP?
Beispielsweise:
return !! $row;
Was würde der obige Code tun?
Was macht der Double Not Operator in PHP?
Beispielsweise:
return !! $row;
Was würde der obige Code tun?
Antworten:
Es ist nicht der "doppelte Nicht-Operator", sondern der Nicht- Operator, der zweimal angewendet wird. Das Recht !
führt unabhängig vom Operanden zu einem Booleschen Wert . Dann wird die Linke !
diesen Booleschen Wert negieren.
Dies bedeutet, dass Sie für jeden wahren Wert (andere Zahlen als Null, nicht leere Zeichenfolgen und Arrays usw.) den booleschen Wert erhalten TRUE
und für jeden falschen Wert (0, 0.0 NULL
, leere Zeichenfolgen oder leere Arrays) der boolesche Wert FALSE
.
Es entspricht funktional einer Besetzung für boolean
:
return (bool)$row;
!!
gleich (bool)
in diesem Fall? Oder wird je nach verwendetem Maschinencode ein anderer Maschinencode ausgeführt?
!value
, und wenn es eine gerade Anzahl von Pony gibt, ist es dieselbe wie (bool) value
.
Es ist das gleiche (oder fast das gleiche - es könnte einen Eckfall geben) wie das Casting auf Bool. Wenn $row
würde dann wahr werden!! $row
ist es auch wahr.
Aber wenn Sie erreichen wollen (bool) $row
, sollten Sie wahrscheinlich genau das verwenden - und nicht einige "interessante" Ausdrücke;)
!!
ist eine Gewohnheit, die beim Programmieren in C (++) verbleibt. In C ist das Ausführen eines Casts nicht so einfach wie in PHP. Sie können viele verschiedene Probleme bekommen, Warnungen kompilieren und so weiter !!
.
operator!
es überladbar ist, C++
wäre es gefährlich, es zu verwenden. Sie können Strukturen auch nicht in C umwandeln oder !
mit ihnen verwenden. Auch wenn etwas negiert werden kann, können Sie es höchstwahrscheinlich von einer Funktion zurückgeben, die int zurückgibt, was es so ziemlich zu einem Booleschen Wert macht. Bist du sicher, dass du über C sprichst?
!!
ist nichts "Interessantes", wie Sie so behauptet haben. Es ist überall von C bis JavaScript.
Es bedeutet, wenn $row
es einen wahrheitsgemäßen Wert hat, wird es zurückkehrentrue
und andernfalls false
in einen booleschen Wert konvertiert.
Hier sind Beispielausdrücke für die boolesche Konvertierung aus PHP-Dokumenten.
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
"nicht nicht" ist in vielen Sprachen ein bequemer Weg, um zu verstehen, welchen Wahrheitswert die Sprache dem Ergebnis eines Ausdrucks zuweist. Zum Beispiel in Python :
>>> not not []
False
>>> not not [False]
True
Dies kann praktisch sein, wenn Sie einen komplexen Wert auf "Gibt es überhaupt einen Wert?" Reduzieren möchten.
Eine andere menschlichere, vielleicht einfachere Art, das Nicht-Nicht-Lesen zu "lesen":
Der Erste '!' macht zwei Dinge: 'konvertiere' den Wert in einen Booleschen Wert und gebe dann das Gegenteil aus. Es wird also wahr sein, wenn der Wert "falsch" ist.
Der Zweite '!' ist nur das Gegenteil des ersten auszugeben.
Im Grunde kann der Eingabewert also alles sein, vielleicht eine Zeichenfolge, aber Sie möchten eine boolesche Ausgabe, verwenden Sie also das erste '!'. Wenn Sie an dieser Stelle TRUE möchten, wenn der Eingabewert "falsy" ist, hören Sie hier auf und verwenden Sie einfach ein einzelnes "!". Andernfalls, wenn Sie TRUE möchten, wenn der Eingabewert "wahr" ist, fügen Sie ein weiteres "!" hinzu.
Schauen wir uns das an
!$a;
Anstatt das zu interpretieren! Betreiber als nehmen die
Boolesches Gegenteil des Wertes rechts davon
lesen
Nimm das Boolesche Gegenteil des Ausdrucks rechts davon
In diesem Fall
$a;
könnte ein Ausdruck sein
so zu ist
!$a;
so ist es
!!$a;
und
!!!$a;
und so weiter, da jeder von diesen ein gültiger Ausdruck ist, ist das! Operator kann jedem von ihnen vorangestellt werden.
return (bool) $row;