Ist das ein OK-Test, um zu sehen, ob eine Variable gesetzt ist?

8

Gestern habe ich eine Antwort auf eine Frage gepostet das beinhaltete mehrere (mir zu der Zeit unbekannte) sehr schlechte Codebeispiele. Seitdem habe ich mir meine grundlegenden PHP-Kenntnisse angeschaut, die mir erlaubten zu denken, dass ein solcher Code möglich ist. Das bringt mich zu einer Frage, auf die ich keine Antwort finden kann:

Wenn ich nachsehen möchte, ob eine Variable etwas gesetzt hat oder nicht, ist es dann sinnvoll, nicht isset() oder eine andere Hilfsfunktion zu verwenden? Hier ist ein "zum Beispiel":

%Vor%

Statt ...

%Vor%

Vom Namen der Variablen können Sie sehen, dass diese Variable nicht gesetzt ist. Daher wäre die Bedingung falsch und der else -Anteil würde laufen. Bis jetzt habe ich diese Übung benutzt, aber nach den Posts gestern habe ich jetzt eine Ahnung, dass das falsch ist.

Hier ist der Grund, warum ich dachte, dass es eine gute Übung wäre, die obige isset() -Funktion wegzulassen. Aus dem PHP-Handbuch:

  

Das if-Konstrukt ist eines der am meisten   wichtige Merkmale vieler Sprachen,   PHP enthalten. Es ermöglicht   bedingte Ausführung von Code   Fragmente. PHP verfügt über ein if   Struktur, die der von ähnlich ist   C:

     

if (Ausdruck) Anweisung

     

Wie im Abschnitt über. beschrieben   Ausdrücke, Ausdruck wird ausgewertet   zu seinem booleschen Wert. Wenn Ausdruck   ergibt TRUE, wird PHP ausgeführt   Anweisung, und wenn es ausgewertet wird   FALSE - es wird ignoriert. Mehr   Informationen darüber, welche Werte ausgewertet werden   zu FALSCH finden Sie in der   'Umwandlung in booleschen' Abschnitt.

Und von der 'Umwandlung in den booleschen Abschnitt':

  

Bei der Konvertierung in boolean   , werden die folgenden Werte berücksichtigt   FALSCH:

     

...       * Der spezielle Typ NULL (einschließlich nicht gesetzter Variablen)

Warum sollte in dem Handbuch nicht ausdrücklich erwähnt werden, dass nicht festgelegte Variablen enthalten sind, wenn dies eine schlechte Vorgehensweise ist? Wenn es nicht gesetzt ist, wird es in NULL konvertiert und daher von der Bedingung richtig ausgewertet. Die Verwendung von isset() führt zu demselben Ergebnis, erfordert jedoch zusätzliche Zyklen.

Kann mir bitte jemand aufklären, ob ich die ganze Zeit falsch gelegen habe und warum? (Und wie schlimm ist es vielleicht?)

Danke, SO, du enttäuschst nie.

Edit: Danke allen (und das war schnell). Ich denke wirklich, dass alle Antworten bis jetzt großartig sind und nicht wissen, welche für die Antwort auszuwählen ... Wenn deins nicht ausgewählt wird, werde ich noch upvote: o)

    
Tim 20.07.2010, 23:14
quelle

5 Antworten

6

Sie werden zu Problemen führen, wenn Ihre Variable gesetzt ist, aber wie folgt zu FALSE ausgewertet:

  •            der boolesche FALSE selbst          
  •    
  •            die ganze Zahl 0 (Null)          
  •    
  •            der Float 0.0 (Null)          
  •    
  •            die leere Zeichenfolge und die      Zeichenfolge "0"          
  •    
  •            ein Array mit null Elementen          
  •    
  •            ein Objekt mit Nullelement      Variablen (nur PHP 4)          
  •    
  •            der spezielle Typ NULL (einschließlich      nicht gesetzte Variablen)    
  •    
  •            SimpleXML-Objekte, die aus empty erstellt wurden      Stichworte    
  •   

Entnommen aus dem PHP-Handbuch.

Grundsätzlich zeigt die Verwendung von isset () an, dass Sie explizit prüfen, ob eine Variable existiert und nicht NULL ist, während die Struktur Ihrer if-Anweisung nur prüft, ob die Variable wahr ist. Es ist klarer und weniger fehleranfällig.

    
jergason 20.07.2010, 23:22
quelle
12

Wenn die Variable nicht gesetzt ist, erhalten Sie Notice . Wenn Sie isset() verwenden, erhalten Sie keine Benachrichtigung. Aus Sicht der Fehlerberichterstattung ist die Verwendung von isset() besser:)

Beispiel:

%Vor%

gibt

%Vor%

während

%Vor%

gibt nichts aus.

Die untere Zeile: Wenn die Codequalität für Sie wichtig ist, verwenden Sie isset() .

    
Felix Kling 20.07.2010 23:17
quelle
7

Es ist okay , aber es ist keine gute Übung, if zu verwenden, um nach einer gesetzten Variable zu suchen. Zwei Gründe aus dem Kopf:

  1. Die Verwendung von isset macht die Absicht klar - Sie überprüfen, ob die Variable gesetzt ist, und prüfen nicht, ob eine Bedingung wahr ist.
  2. if ($not_set) wird zu false ausgewertet, wenn $not_set tatsächlich gesetzt ist, aber gleich boolean false .
casablanca 20.07.2010 23:20
quelle
4

Es ist eine gängige Praxis, aber es ist nicht gut - Sie sollten immer isset verwenden!

Wenn Ihr $not_set gesetzt ist und ein bool mit dem Wert false ist, wird Ihr "Test" fehlschlagen!

    
Andreas Rehm 20.07.2010 23:20
quelle
1

isset funktioniert als Wächter, der verhindert, dass Sie Variablen verwenden, die nicht wirklich existieren.
if (isset($foo)) und if ($foo) bedeuten nicht dasselbe. isset sagt Ihnen nur, wenn die Variable tatsächlich existiert und wenn es in Ordnung ist, sie zu verwenden, wird der Wert der Variablen * nicht ausgewertet.

Daher sollten Sie normalerweise eines dieser beiden Muster verwenden:

Wenn die Variable sicher existiert und Sie nur ihren Wert überprüfen möchten:

%Vor%

Wenn die Variable vorhanden sein kann oder nicht und Sie ihren Wert überprüfen möchten:

%Vor%

Wenn Sie nur daran interessiert sind, dass eine Variable gesetzt ist und zu true , d. h. if ($foo) , auswertet, können Sie empty :

verwenden %Vor%

* Es wird nach null gesucht, wobei null so gut ist, wie gar nicht gesetzt zu werden

    
deceze 21.07.2010 00:21
quelle

Tags und Links