Dies ist im Wesentlichen das gleiche wie zu tunreturn (bool) $row;
WildlyInaccurate
5
Ich habe mich gefragt, welcher von ihnen schneller ist und wir haben (bool) als Gewinner. i.stack.imgur.com/dcnsM.png
Binod Kalathil
1
@ Binod das ist eine nette Info, danke dafür!
Robin K
Antworten:
290
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 TRUEund 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:
"double-not-operator" oder "double not-operator" .. hängt davon ab, wie Sie es lesen.
Nickf
9
@nickf nicht wirklich, "der doppelte Nicht-Operator" bezieht sich auf einen Operator, nicht auf die zweimalige Verwendung des Nicht-Operators.
Theo
3
@ Theo, es ist eigentlich ein Operator? Hat der Dolmetscher betrachtet !!gleich (bool)in diesem Fall? Oder wird je nach verwendetem Maschinencode ein anderer Maschinencode ausgeführt?
Sie können so viele verwenden, wie Sie möchten. Wenn es eine ungerade Anzahl von 'Pony' (Ausrufezeichen) gibt, ist dies eine NICHT-Operation wie bei !value, und wenn es eine gerade Anzahl von Pony gibt, ist es dieselbe wie (bool) value.
Diamondsea
51
Es ist das gleiche (oder fast das gleiche - es könnte einen Eckfall geben) wie das Casting auf Bool. Wenn $rowwü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;)
Vielen Dank, dass dies tatsächlich Sinn macht. Ich habe so etwas noch nie in einer anderen Programmiersprache gesehen.
Andrei
16
Die Verwendung !!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 !!.
NikiC
1
@nikic - Es klingt seltsam, IMO ... da 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?
Viraptor
2
Ich habe gesehen !! in vielen C-Programmen als sichere Konvertierung in 1/0. (Da Boolescher Wert in C. wirklich nichts als 0 / "nicht Null" ist)
Prof. Falken
1
@viraptor, !!ist nichts "Interessantes", wie Sie so behauptet haben. Es ist überall von C bis JavaScript.
Pacerier
18
Es bedeutet, wenn $rowes einen wahrheitsgemäßen Wert hat, wird es zurückkehrentrue und andernfalls falsein einen booleschen Wert konvertiert.
Hier sind Beispielausdrücke für die boolesche Konvertierung aus PHP-Dokumenten.
"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 :
>>>notnot[]False>>>notnot[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.
return (bool) $row;
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.0NULL
, leere Zeichenfolgen oder leere Arrays) der boolesche WertFALSE
.Es entspricht funktional einer Besetzung für
boolean
:quelle
!!
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;)quelle
!!
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 andernfallsfalse
in einen booleschen Wert konvertiert.Hier sind Beispielausdrücke für die boolesche Konvertierung aus PHP-Dokumenten.
quelle
"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 :
Dies kann praktisch sein, wenn Sie einen komplexen Wert auf "Gibt es überhaupt einen Wert?" Reduzieren möchten.
quelle
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.
quelle
Schauen wir uns das an
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
könnte ein Ausdruck sein
so zu ist
so ist es
und
und so weiter, da jeder von diesen ein gültiger Ausdruck ist, ist das! Operator kann jedem von ihnen vorangestellt werden.
quelle