Prüfen der Prüfung

  • Moin,
    hab in fremden Quellcode das hier gesehen:

    PHP
    if(isset($var) == false){
    ...
    }


    Gibt es irgent einen Grund warum man das so schreiben sollte?
    Ich meine == false ist ja schon mal falsch, das es ja nicht exakt (den Typ) prüft.
    Ausserdem gibt isset() ja true oder false zurück, und das if prüft ja schon auf true oder false.


    Sozusagen prüft das ja:

    PHP
    wenn true (
        wenn "false" (
            wenn gesetzt ( var )
        )
    )


    Wozu macht man das? :D

  • falls es eben nicht gesetzt ist?
    if (isset(var) == false) ist äquivalent zu if (! isset(var))
    wie wolltest du denn sonst eine Aktion ausführen genau dann wenn var nicht gesetzt ist?
    Und warum sollte == false falsch sein?

  • if (isset(var) == false) ist äquivalent zu if (! isset(var))


    Das meinte ich ja.
    Aber müsste es dann nicht heißen:
    if ( isset(var) === false )
    ?
    Wenn ich "==" prüfe, dann prüfe ich doch nicht auf den typ. Auch wenn bei isset() nur true/false zurückgegeben wird.


    Also einen tieferen Hintergrund hat es nicht, oder?

  • und was macht es für einen Sinn hier auf den Typ zu prüfen?
    Du bekommst true oder false als boolean zurück, warum willst du dann nochmal prüfen ob es ein boolean ist? Ist doch Zeitverschwendung, wenn du doch weißt, dass es ein boolean ist?

  • Ich doch nicht :D
    ich sag doch - ich hab das in fremden code so gesehen :D
    if(!isset(var)) ist mMn das sinnvollste.
    Die frage war ja ob da ein tieferer sinn dahinter steckt, den ich nicht kenne :D

  • if(!isset(var)) und if(isset(var) == false) sind wie gesagt das gleiche. if(!isset(var)) ist auch nicht sinnvoller als if(isset(var)==false), sondern einfach schlichtweg genau das selbe.
    Das hat dann was mit persönlichen Präferenzen, nichts mit Sinn zu tun. Ich persönlich bevorzuge in unübersichtlichen Codes auch die == Variante, einfach weil man das meiner Meinung nach auf einen Blick besser sieht als so ein Ausrufezeichen.
    Was allerdings keinen Sinn macht (programmiertechnisch) ist if(isset(var) === false), da hier sowieso klar ist, dass ein boolean rauskommt und somit die Typ-Überprüfung sinnlos ist und nur zusätzlich die Performance belastet.

  • oh ob das die peroformance belastet weiß ich nicht.
    wäre aber interesannt das mal zu wissen
    was schneller ist == oder ===
    wenn beide typen gleich sind


    also wenn die typen verschiden sind ist klar das === schneller ist wenn die typen sowiso schon gleich sind dann mh

  • Naja das meinte ich ja. Es gibt also für if(isset(var)==false) einen sinn - man liest es einfacher.
    Hätt ja sein können, dass es da noch was gibt, was ich nicht kenne.


    Hat jemand ne idee wie man die performance bei solchen kleinen code-schnipseln testen kann?


  • Da könnt ihr mal selber überprüfen ob eure Theorien stimmen ;)

  • Typen nicht gleich:'2' und 2
    ==: 1.3301720619202 Sekunden!
    ===: 0.52525305747986 Sekunden!
    Typen gleich:2 und 2
    ==: 0.56588196754456 Sekunden!
    ===: 0.59017181396484 Sekunden!


    Typen nicht gleich:'' und false
    ==: 0.65048694610596 Sekunden!
    ===: 0.52743411064148 Sekunden!
    Typen gleich:false und false
    ==: 0.63379812240601 Sekunden!
    ===: 0.5799241065979 Sekunden!

  • Hab mal das bsp if(isset(var)...) mit rein genommen:


    Wow!
    Ich glaub ich nutze nie wieder if(!$var) :huh:
    Ich glaub ich werd in zukunft sehr viel testen :D


    EDIT:
    ich glaube bei "if ('2' == 2)" (typen sind ncht gleich) kommt viel arbeit zustande, da php versucht die '2' als int zu verwenden.
    Hatte das mal gelesen.


    EDIT2:
    ja, tut es wohl:

    Zitat


    test: '2' + 2
    : 1.2720310688019 Sekunden!


    test: 2 + 2
    : 0.50452089309692 Sekunden!

  • was da los cotton bei mir ist das genau andersrum^^ $na nicht gesetzt
    isset($na) == false:
    : 0.83369088172913 Sekunden!
    isset($na) === false:
    : 0.78558301925659 Sekunden!
    !isset($na):
    : 0.88517093658447 Sekunden!

  • keine ahnung :D
    Hab den einen test auch noch mal komplett alleine laufen lassen und bekomme als ergebniss: "==" immer schneller als "===".


    Wenn ich aber alles insgesamt richtig sehe, dann ist es wohl das sinnvollste, wenn man
    if(isset($var))
    und
    if(!isset($var))
    nutzt.


    Das eine ist bei nicht gesetzter $val schneller, das andere bei gesetzter $val.
    Was aber immer relativ gleich bleibt ist bei mir if(isset()) / if(!isset()).

  • jo.
    jetzt habe ich auch noch etwas getestet. bezüglich eines anderen themas hier im forum wo beim echo immer die warnungen gekommen sind die variable gibts garnicht



  • Also ist wohl das error_reporting() in php sehr zeitaufwendig (?)


    Ich hatte extra error_reporting(E_ALL ^ E_NOTICE); gesetzt. Aber im hintergrund wird es wohl doch "bearbeitet".
    Und wenn zB eine notice auch nur geworfen werden würde, dann geht das auf kosten der performance.
    und überraschung mit dem @ :D:

    Zitat


    if (!$na)
    : 0.52884411811829 Sekunden!


    if (@!$na)
    : 3.447417974472 Sekunden!

  • Das @ sollte man ja auch nur in Notfällen benutzen..
    Natürlich gehen "Fehler" (auch Notices) auf Kosten der Performance - der Interpreter trifft ja auf etwas, was er nicht erwartet und muss dementsprechend rausfinden, ob er das Programm weiterlaufen lassen kann oder nicht und wie er mit dem "Fehler" umgeht.

Jetzt mitmachen!

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