Paul: if mit ===

Moin,
habe Quelltext von einem Kollegen bekommen, an dem ich weiterarbeiten soll.

Sind hier die drei = sinnvoll?~~~php

$content = $_GET['content'];
if($content === "maps")

  1. Hallo,

    Sind hier die drei = sinnvoll?

    $content = $_GET['content'];

    if($content === "maps")

      
    nein, und das Umkopieren der GET-Parameter auch nicht.  
    Der Operator === wird verwendet, um zwei Operanden nicht nur hinsichtlich ihres Wertes, sondern auch ihres Typs zu vergleichen - beispielsweise um unterscheiden zu können, ob eine Funktion den boolschen Wert false oder den numerischen Wert 0 zurückgibt.  
      
    In deinem Beispiel sind beide Operanden Strings, ein typsicherer Vergleich bringt also keinen zusätzlichen Gewinn.  
      
    Ciao,  
     Martin  
    
    -- 
    Es sagte...  
    ein korpulenter Lehrer zu einem Schüler, der ihn ein Fass genannt hatte: "Nein. Ein Fass ist von Reifen umgeben, ich dagegen von Unreifen."  
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    
    1. Moin!

      Hallo,

      Sind hier die drei = sinnvoll?

      $content = $_GET['content'];

      if($content === "maps")

      
      >   
      > nein, und das Umkopieren der GET-Parameter auch nicht.  
      > Der Operator === wird verwendet, um zwei Operanden nicht nur hinsichtlich ihres Wertes, sondern auch ihres Typs zu vergleichen - beispielsweise um unterscheiden zu können, ob eine Funktion den boolschen Wert false oder den numerischen Wert 0 zurückgibt.  
      >   
      > In deinem Beispiel sind beide Operanden Strings, ein typsicherer Vergleich bringt also keinen zusätzlichen Gewinn.  
        
      $\_GET['content'] könnte auch ein Array sein...  
        
      === ist nie sinnlos. Es ist zu bevorzugen, wenn man keine unerwarteten Überraschungen haben will.  
        
        
      ~~~php
        
      $var1 = 0;  
      $var2 = 'foobar';  
        
      var_dump($var1 == false); //true  
      var_dump($var2 == true); //true  
      var_dump($var1 == $var2); //true  
      
      

      Wenn $var1 == false ist, und $var2 == true, und $var1 == $var2, dann ist true == false.

      - Sven Rautenberg

      1. Hi!

        $_GET['content'] könnte auch ein Array sein...

        === ist nie sinnlos. Es ist zu bevorzugen, wenn man keine unerwarteten Überraschungen haben will.

        Genau! :-)

        Was ist z.B. damit?

          
        <input name="content[]" />  
        <input name="content[]" />  
        
        

        Die _GET Variablen müssen kein String sein.

        Grüße

        • Steffen
    2. Hi!

      $content = $_GET['content'];

      if($content === "maps")

      
      > In deinem Beispiel sind beide Operanden Strings, ein typsicherer Vergleich bringt also keinen zusätzlichen Gewinn.  
        
      Für das Beispiel nicht, aber beim Vergleich mit Leerstring ergibt sich ein Unterschied im Zusammenhang mit obiger Umkopieraktion oder auch beim direkten Vergleich von $\_GET['content'] und Leerstring. Wenn $\_GET['content'] nicht existiert, ergibt ein Lesezugriff nicht nur eine normalerweise unterdrückte Notice-Meldung sondern auch null als Wert. Der ist zwar == "" aber nicht === "". Das könnte man ausnutzen, um auf das Nicht-Vorhandensein eines Parameters zu testen, aber das wäre nicht sehr intuitiv lesbar - dann lieber isset() verwenden.  
        
      Dann gab es da noch den Einwand mit dem Array - der ist nicht weiter relevant, weil es keinen Unterschied zwischen == und === gibt. Beim [Vergleich](http://de.php.net/manual/en/types.comparisons.php) eines Arrays mit einem String kommt immer false raus.  
        
        
      Lo!
      
    3. Hi,

      nein, und das Umkopieren der GET-Parameter auch nicht.

      => das ist so pauschal Quatsch. Ich würde mittlerweile und in meinem Falle eher behaupten, REQUEST-Parameter _NIEMALS_ verändern zu versuchen.

        
      $_GET['sucker'] = $_GET['sucker'] . "XXX";  
      
      

      Wir arbeiten hier an einem über _SEHR_ viele Jahre gewachsenem System, an dessen Erstellung verschiedenste Agenturen und Programmierer beteiligt waren. Man kann sich den Code vorstellen. Nun dumpe ich GET in irgendeinem Skript in irgendeiner Methode auf Zeile 4800 und sehe da GET sucker => "textXXX".

      Die Zeit, in diesem Chaos immer alles zu überprüfen, haben wir nicht. Es muss gewährleistet sein, dass die übergebenen Werte nicht irgendwo im Programm verändert wurden (wir reden hier nicht von Bereinigungen, Validierungen, etc).

      Nur meine Meinung, vielleicht habe ich dich aber auch falsch verstanden

      Greetz
      RazonCon

      1. Hallo,

        nein, und das Umkopieren der GET-Parameter auch nicht.
        => das ist so pauschal Quatsch.

        dann ergänze ich, was mir in diesem Satz selbstverständlich erschien: das _reine_ Umkopieren.

        Ich würde mittlerweile und in meinem Falle eher behaupten, REQUEST-Parameter _NIEMALS_ verändern zu versuchen.

        Das würde ich auch nicht empfehlen (obwohl es ohne weiteres erlaubt ist).

        Ich bezog mich aber nur auf das nackte Umkopieren, ohne dass der Wert dabei geprüft, verändert oder sonstwie behandelt wird. *Das* halte ich tatsächlich für Unfug, der mehr schadet als nützt.

        Es muss gewährleistet sein, dass die übergebenen Werte nicht irgendwo im Programm verändert wurden

        Das ist IMHO tatsächlich eine gute Devise.

        Nur meine Meinung, vielleicht habe ich dich aber auch falsch verstanden

        Scheint so ...

        Ciao,
         Martin

        --
        Vielseitigkeit: Von vielen Dingen keine Ahnung haben.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hallo,

          nein, und das Umkopieren der GET-Parameter auch nicht.
          => das ist so pauschal Quatsch.

          dann ergänze ich, was mir in diesem Satz selbstverständlich erschien: das _reine_ Umkopieren.

          => das ist tatsächlich grober Unfug. Wüsste auch nicht, warum man sowas tun sollte.

          Na ja, egal, schönes Wochenende, ich habe jetzt bis Montag FREIEIEIEIEI!

          razorcon

  2. Moin!

    habe Quelltext von einem Kollegen bekommen, an dem ich weiterarbeiten soll.

    Sind hier die drei = sinnvoll?~~~php

    $content = $_GET['content'];
    if($content === "maps")

      
    Ja, das Gleichheitszeichen eine Zeile drüber ist es aber nicht.  
      
    Du weißt, was === bedeutet?  
      
     - Sven Rautenberg
    
  3. Hi,

    Sind hier die drei = sinnvoll?~~~php

    $content = $_GET['content'];
    if($content === "maps")

      
    Sie sind zumindest nicht falsch, und eigentlich auch empfehlenswert.  
      
    Da $\_GET idR. Strings enthält, besteht hier allerdings wenig Gefahr einer automatischen Typ-Umwandlung, die unerwartete Ergebnisse bringen könnte.  
      
    Anders sähe das aus, wenn $content nicht unbedingt ein String sein muss:  
    ~~~php
    var_dump(0 == "maps");  
    // Ausgabe: bool(true)
    

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  4. Hi,

    $content = $_GET['content'];

    die Frage ist eher, ist das Umkopieren ohne Überprüfung etc. sinnvoll?

    if($content === "maps")

    prüft auf identität, sprich Wert _und_ Variablentyp müssen übereinstimmen. Würdest Du hier z.B. für Zahlen so prüfen:
    if($content === 6)...
    wäre die Bedingung nie wahr, weil Requestparameter immer als String übergeben werden.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.