2010-12-11 9 views
2

so, wenn ich diesen Code haben:

$bla = 1;  
if($foo && $bla) do_whatever... 

erhalte ich eine Mitteilung mir zu sagen, dass $foo eine nicht definierte Variable ist.

Also muss ich meinen Code dies ändern:

$bla = 1; 
if(isset($foo) && $foo && $bla) do_whatever... 

Gibt es trotzdem kann ich Überprüfung vermeiden, wenn eine Variable zugeordnet ist und übernehmen nur die Variable falsch ist, aber ohne PHP Hinweise deaktivieren zu müssen?

+1

Nr. Hinweise sind für das Debuggen. Dieser Fall insbesondere. – mario

+0

Related: http: //programmers.stackexchange.com/questions/20080/why-do-many-php-devs-hate-using-isset-und-oder-von-phps-ähnlich-defensive – trante

Antwort

5

Abhängig von der genauen Verhalten, das Sie möchten, können Sie überprüfen, ob die Variable empty() ist:

gibt false zurück, wenn var einen nicht leeren und Nicht-Null-Wert hat.

die folgenden Dinge in Betracht gezogen werden, um leer sein:

"" (ein leerer String) 0 (0 als integer) "0" (0 als String) NULL FALSE Array() (ein leeres Array) var $ var; (Eine Variable deklariert, aber ohne einen Wert in einer Klasse)

Es ist wichtig, alle diese Fälle zu verstehen, aber es ist praktisch Sprachkonstrukt. wenn $ foo nicht definiert ist if($foo) eine Mitteilung werfen, aber if(!empty($foo)) wird nicht - der Ausdruck false

Diese missbraucht, sollte jedoch nicht beurteilen wird. Wie andere bereits gesagt haben, dienen diese Hinweise Ihrem Schutz. Wenn Sie also Ihre Variablen definieren können, sollten Sie dies tun. Wo empty() besonders praktisch ist, sind Dinge wie - Testen auf die Existenz von Eingaben in Superglobals.

+0

Beachten Sie, dass Vorsicht mit dem leeren() Konstrukt genommen werden sollte. Es ist manchmal kontraintuitiv, dass leer ("0"), sowie die Tatsache, dass leer ("") == leer (array()), und leer (falsch) == leer (null) (völlig unterschiedliche Typen). –

4

Nein, gibt es nicht.

5

Der ganze Punkt der Hinweise ist es, Ihnen zu sagen, dass etwas falsch sein könnte (wie Schreiben $fooo anstelle von $foo). Also, wenn Sie sie nicht verwenden, können Sie sie auch deaktivieren. Sie können eine Benachrichtigung selektiv deaktivieren, indem Sie Ihre eigene Fehlerbehandlungsroutine festlegen und den Fehler stillschweigend verwerfen, wenn er vom Typ "undefined Variable" ist.

Natürlich wäre die saubere Sache zu tun, Ihre Variablen an erster Stelle zu definieren.

2

Nein, Sie sollten immer genau wissen, was mit Ihren Variablen los ist. Tatsächlich sollten Sie niemals isset() für eine Variable selbst verwenden müssen.

0

Sie könnten tun:

if(@$foo && $bla) do_whatever... 

Das @ wird die Warnung unterdrücken.

Aber Sie sollten es wirklich nicht tun. Nicht alle Ihre Eingaben zu überprüfen, ist einfach falsch.