Unterschied zwischen “!==” und “==!” [closed]

Lesezeit: 6 Minuten

Benutzer-Avatar
Gerhard Schneider

Gestern bin ich darüber gestolpert, als ich PHP-Code geändert habe, der von jemand anderem geschrieben wurde. Ich war verblüfft, dass ein einfacher Vergleich (if ($var ==! " ")) hat nicht wie erwartet funktioniert. Nach einigen Tests wurde mir klar, dass derjenige, der diesen Code geschrieben hat, verwendet hat ==! Anstatt von !== als Vergleichsoperator. ich habe noch nie gesehen ==! in jeder Sprache, also fragte ich mich, wie zum Teufel dieser Code überhaupt funktionieren könnte, und führte einige Tests durch:

<?php
echo "int\n";
echo "1 !== 0: "; var_dump(1 !== 0);
echo "1 !== 1: "; var_dump(1 !== 1);
echo "1 ==! 0: "; var_dump(1 ==! 0);
echo "1 ==! 1: "; var_dump(1 ==! 1);
echo "bool\n";
echo "true !== false: "; var_dump(true !== false);
echo "true !== true: "; var_dump(true !== true);
echo "true ==! false: "; var_dump(true ==! false);
echo "true ==! true: "; var_dump(true ==! true);
echo "string\n";
echo '"a" !== " ": '; var_dump("a" !== " ");
echo '"a" !== "a": '; var_dump("a" !== "a");
echo '"a" ==! " ": '; var_dump("a" ==! " ");
echo '"a" ==! "a": '; var_dump("a" ==! "a");
?>

Dies erzeugt diese Ausgabe:

int
1 !== 0: bool(true)
1 !== 1: bool(false)
1 ==! 0: bool(true)
1 ==! 1: bool(false)
bool
true !== false: bool(true)
true !== true: bool(false)
true ==! false: bool(true)
true ==! true: bool(false)
string
"a" !== " ": bool(true)
"a" !== "a": bool(false)
"a" ==! " ": bool(false)
"a" ==! "a": bool(false)

Der Operator scheint für boolesche und ganzzahlige Variablen zu funktionieren, aber nicht für Strings. Ich kann nicht finden ==! in der PHP-Dokumentation oder irgendetwas darüber in einer Suchmaschine (versuchte es mit Google, Bing, DuckDuckGo, aber ich vermute, sie versuchen, es zu interpretieren, anstatt nach der wörtlichen Zeichenfolge zu suchen). Hat das schon mal jemand gesehen und kann etwas zu diesem Verhalten sagen?

  • Komm schon … was ist mit den Upvotes? Ich könnte noch ein Dutzend solcher Fragen aufstellen. Und begleiten sie durch eine quasi seriöse Analyse. Dies ist eine standardmäßige Lehrbuch-Übungspraxis, nein. Bei SO stimmen wir für Qualität und Information, nicht für Spaß und Unterhaltung.

    – sehen

    7. September 2012 um 14:12 Uhr

  • @sehe Er bekommt positive Stimmen, weil es die Definition einer gut recherchierten Frage ist – er hat “gründlich nach einer Antwort gesucht”, “konkret”, die Frage ist “für andere relevant” und “zum Thema”. das OP hat Dinge ausprobiert und uns gezeigt, was er versucht hat; Das ist die Art von Frage, die diese Seite zu fördern versucht

    – JRaymond

    7. September 2012 um 15:59 Uhr

  • @JRaymond: Er bekommt Upvotes, weil es eine Trivia-Frage für ein sehr leicht verständliches Problem und eine leicht verständliche Antwort ist. Der Trivia-Aspekt erhöht die Neugier, was mehr Leute antreibt, und der einfache Aspekt erhöht den Prozentsatz der Leute, die die Frage und die Antwort genug verstehen, um darüber abzustimmen. Es hat nichts damit zu tun, ob es eine gute Frage ist oder nicht.

    – Andreas Bonini

    7. September 2012 um 16:16 Uhr


  • @JRaymond, gib es zu, die meisten Fragen mit hoher Abstimmung sind Kleinigkeiten. Werfen Sie einen Blick auf diese drei Fragen von mir neben vielen anderen: 1, 2, 3. Keine davon ist etwas, das Sie einfach bei Google finden könnten (im Gegensatz zu den meisten hochrangigen Fragen) und sie sind gut durchdacht und erprobt, bevor sie geschrieben werden (Ich weiß, weil ich sie geschrieben habe). Da es sich jedoch um Fragen handelt, die Fachwissen erfordern, erhalten sie nie hohe Stimmen. So funktioniert das System hier.

    – Shahbaz

    7. September 2012 um 16:54 Uhr

  • @JRaymond sehe hat Recht. Schriftsteller würden einen großen Tag auf SO haben. Ich würde vorschlagen, diese Liste durchzugehen (php.net/quickref.php) und sich interessante Probleme einfallen lassen, bei denen die Funktion die Lösung ist. Je undurchsichtiger und interessanter die Situation oder Funktion, desto mehr Stimmen.

    – Mike B

    7. September 2012 um 23:20 Uhr


Benutzer-Avatar
Bang Dao

Der Unterschied besteht darin, dass es keinen Operator gibt ==!.

Dieser Ausdruck:

$a ==! $b

Ist im Grunde dasselbe:

$a == (!$b)

  • Wow, viele gute Antworten in so kurzer Zeit. Ich habe die erste Antwort ausgewählt, die verdeutlicht, dass die ! gilt für die rechte Variable und hat daher den größten Wert. Sorry für die anderen 😉

    – Gerhard Schneider

    7. September 2012 um 7:26 Uhr

  • @Gerald Schneider: Das Mindeste, was Sie tun konnten, um dies auszugleichen, war, diese Antwort so zu verbessern, dass sie in Bezug auf Grammatik und Formatierung mindestens auf Augenhöhe mit den anderen Antworten war (von denen Sie ausdrücklich auf ihre sehr detaillierte Erklärung hingewiesen haben !). Aber egal, ich habe es jetzt bearbeitet.

    – BoltClock

    7. September 2012 um 14:28 Uhr


  • Ich programmiere nicht einmal in PHP und selbst mir ist aufgefallen, dass “==!” würde als die 2 Operatoren “==” und “!” gelesen werden. Es zeigt nur, wie viel Wirkung ein wenig Layout darauf haben kann, wie Sie etwas lesen.

    – Sternenname

    7. September 2012 um 17:47 Uhr

  • @Bang Dao Ähm, JavaScript? Es hat === und !==. Aber nein ==!

    – Psr

    7. September 2012 um 23:02 Uhr

  • @BangDao Jetzt hast du einen weiteren Grund dafür gefunden w3Narren Bitte lesen Sie es, es ist wichtig.

    – etwas

    8. September 2012 um 9:13 Uhr

Benutzer-Avatar
Alfred

Es gibt kein ==! Operator in PHP

Es ist nur eine Kombination aus == und !. Hier ist nur der relevante Operator vorhanden ==. Also die Kombination ==! wird ganz normal funktionieren ==prüfen Equalityund vertrau mir,

$variable_a ==! $variable_b 

ist nichts anderes als

$variable_a == (!$variable_b)

und somit;

"a" ==! " ": bool(false)
"a" ==! "a": bool(false) //is same as "a" == (!"a")

Und

true ==! false: bool(true)
true ==! true: bool(false)

Das Kombinieren mehrerer Operatorzeichen funktioniert möglicherweise nicht immer als Operator. zum Beispiel, wenn wir nehmen = und !es funktioniert nur als Operatoren, wenn es im Muster von ist != oder !==. Es kann zahlreiche Kombinationen für diese Zeichen geben, z !====, !==! etc.. etc.. Operatorkombinationen sollten drin sein einzigartiges Format, einzigartige Reihenfolge, einzigartige Kombinationen (alle Charaktere lassen sich nicht mit allen anderen Charakteren kombinieren) und auf jeden Fall, ohne Leerzeichen dazwischen.

Überprüfen Sie die Liste der Operatoren unten;

Geben Sie hier die Bildbeschreibung ein

  • Ich fiel in die gleiche Illusion, a verwenden zu können <table>.

    – Chad Harrison

    7. September 2012 um 15:27 Uhr

  • + dachte fast, das wäre ein Tisch … aber es ist tatsächlich ein Bild

    – Baba

    4. April 2013 um 21:20 Uhr

Benutzer-Avatar
Michael Laffargue

==! ist kein Operator, sondern zwei :

== und !

! eine höhere Priorität haben als ==

So :

"a" !== " ": bool(true) –> wahr, weil “a” wirklich nicht gleich ” ” ist

"a" ==! " ": bool(false) –> falsch, weil “a” nicht gleich !” “

Könnte mit einem Leerzeichen zwischen == und ! geschrieben werden.

  • false because "a" is not equals to !" " !” ” bedeutet in bool umgewandelt und negiert das, also ist ” ” wahr und !” ” ist falsch.

    – Zaffi

    8. September 2012 um 13:07 Uhr

  • @quarry Ja, ich bin nicht zu sehr in die Erklärung gegangen: p

    – Michael Laffargue

    10. September 2012 um 12:41 Uhr


==! existiert so nicht. Es ist eine etwas kryptische Notation von == !

Da Leerzeichen bei diesen Operationen keine Rolle spielen, könnten Sie genauso gut schreiben a --> bdie zu ausgewertet wird a-- > bwird aber seltsam aussehen.

Also zur Frage: "a" ==! " " wird analysiert "a" == !" ". Die Negation eines Strings wird abgedeckt durch Gießenwas eine beliebige Zeichenfolge bedeutet, aber "0" und " " ist, wenn gecastet, true.

So der Ausdruck "a" == !" " wird übertragen:

  1. "a" == !" "
  2. "a" == !false
  3. "a" == true

Und wie string "a" ist nicht dasselbe wie bool truewertet dies den gesamten Ausdruck zu aus false.

Also, was ist die Moral von der Geschichte? Lassen Sie sich nicht von fehlenden oder falsch platzierten Leerzeichen verwirren! 🙂

Benutzer-Avatar
AD7sechs

==! ist kein Betreiber

==! ist überhaupt kein PHP-Vergleichsoperator – es ist dasselbe wie == ! (Leerzeichen beachten)

Dh

if ("a" !== " ") {
    // evaluates to true - "a" and " " are not equal
}

if ("a" == !" ") {
    // unreachable
} else {
    // evaluates to false - "a" is not equal to true (!" " evaluates to true)
}

1360780cookie-checkUnterschied zwischen “!==” und “==!” [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy