Der Feine Unterschied: != und !==

  • gewünschtes Resultat: Ausführen, wenn $var nicht leer ist


    Warum bekommt man als Ergebnis "bedingung nicht wahr"?
    Weil != nicht auf den Typ prüft. Daher ist '' und 0 gleich leer.


    !== dagegen prüft auch den Typ. Und 0 ist nicht '' (int ist nicht str).


    Kann man schon mal drauf rein fallen =)

  • AND?
    Wenn sowohl leer als auch false dann "bedingung wahr" sonst "bedingung nicht wahr"?


    Logisches OR wäre doch sinnvoller oder verstehe ich deine Logik da nicht

  • Ich hätte das false weglassen können. Das gehört eigtl gar nicht zum Thema.
    Hier gehts um '' und 0.


    Also:


    EDIT:

    Zitat

    Wenn sowohl leer als auch false dann "bedingung wahr" sonst "bedingung nicht wahr"?


    Nö.
    Wenn NICHT leer und NICHT false, dann wahr, sonst nicht wahr.
    =)



    EDIT2:
    noch ein Bsp: user login
    Angenommen $_POST['password'] geht durch irgendeine Funktion, welche durch einen Fehler 0 (int) zurückgibt. (Es gibt sicherlich ein besseres Bsp)
    Dann wird ein "schwacher" vergleich mittels == ein Fatales Ergebnis bringen:


    PHP versucht beim Vergleich den String in eine Zahl umzuwandeln. Dabei kommt 0 (int) heraus, da der String nicht gewandelt werden kann.


    Für mich gilt ab jetzt (wenn ich hoffentlich daran denke): IMMER typen starke Vergleichsoperatoren nutzen.
    Das bring einige Arbeit mehr, weil zB GET/POST/SQL immer Strings liefern,
    aber in Sachen (Selbst-)Sicherheit bringt es viel.


    Btw: zum Thema GET/POST immer String: http://www.html-seminar.de/htm…-string-zu-int/#post32262

  • Zum Thema wohl passend:
    http://www.heise.de/newsticker…nen-entdeckt-2556800.html
    (^ auch wenn nur so dahin geschmissener Artikel)
    Details: https://typo3.org/teams/securi…e/typo3-core-sa-2015-001/


    EDIT: Kommentar zu empty() http://www.heise.de/security/n…292494/msg-26526062/read/


    Fix: https://typo3.org/fileadmin/se…eam/bug65113/fix_65113.sh


    Was wird gesucht und ersetzt:


    wie man es hätte besser machen köönen (mMn):


    Kommentar zum Fix:


    Also immer schön auf den Typ ( === , !== ) prüfen.
    Nebenbei ist das lesen des Codes auch noch einfacher. Denn wenn da steht:

    PHP
    if($this->nichtSoKlarWasHierRauskommt() === true)


    dann weiß man auf jeden fall was genau hier erwartet wird.
    Wenn man sich jetzt noch (soweit wie möglich) daran hält, dass keine "mixed types" aus einer Methode/Funktion returnd werden,
    dann weiß man: diese Methode/Funktion gibt entweder TRUE oder FALSE zurück.

  • Hierzu noch eine kleine Anmerkung:


    Passt bei case/usort auf die Vergleichen typschwach.


    Beispiel:



    Umgehen kann man das ganze so:


Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!