Also, wenn ich dich richtig verstanden habe, willst du die Variable $mode prüfen. Wenn sie nicht definiert ist oder wenn sie einen anderen Wert als true oder false enthält, soll er den Wert false erhalten.
Es gibt einiges hier zu berücksichtigen. Eine Sache ist die automatische Konvertierung von Datentypen. Nehmen wir dieses Beispiel:
PHP-Code:
$variable = 0;
if($variable == false) echo "0 ist falsch";
Die Variable $variable wird automatisch konvertiert: sie erhält einen boolschen Wert, damit die Bedingung if($variable == false) ausgeführt werden kann. Eine Zahl, die nicht gleich 0 ist, wird zu false: 0 aber wird zu false. So ist die Bedingung $variable==false wahr, und der echo-Befehl wird ausgeführt. Dasselbe passiert, wenn wir $variable zwar deklarieren, aber ihr wird kein Wert zugewiesen.
Das kann man unterbinden, indem man === nimmt, statt ==. Dieser Operator konvertiert keine Datentypen -- sind die Daten unterschiedlicher Typen, ist das Ergebnis automatisch false:
PHP-Code:
$variable = 0;
if($variable === false) echo "0 ist falsch";
$variable hat einen Wert des Typs integer, false ist ein Wert des Typs boolean, also ist die Bedingung falsch und der echo-Befehl wird
nicht ausgeführt.
Für "ist nicht" nehmen wir statt != nun !== damit keine Konvertierung stattfindet.
Zweitens: PHP ist keine natürliche Sprache. Nehmen wir den Satz "Falls $variable nicht 1 oder 2 ist...". Das können wir nicht wörtlich in PHP "übersetzen":
PHP-Code:
if($variable !=1 || $variable !=2) echo "Hallo Welt";
Der echo-Befehl wird immer ausgeführt. Warum? Weil || bedeutet: Wenn links wahr ist, oder rechts wahr ist, oder beides, dann ist das Ergebnis wahr. Gleicht $variable 1, ist links falsch und rechts wahr; gleicht $variable 2, ist links wahr und rechts falsch. Gleicht $variable etwas anders, sind beide Seiten wahr. In allen drei Fällen ist das Ergebnis wahr.
Statt || brauchen wir && -- das bedeutet: Das Ergebnis ist nur dann wahr, wenn
links und rechts wahr ist:
PHP-Code:
if($variable !=1 && $variable !=2) echo "Hallo Welt";
Zu Deutsch: Falls $variable nicht 1 ist und $variable auch nicht 2 ist...
Nun zurück zum eigentlichen Problem. Wenn $mode keinen boolschen Wert hat, soll sie den Wert false erhalten. Wenn sie gar nicht vorhanden ist, soll sie den Wert false erhalten. Nur, wenn sie true ist, soll sie so bleiben, wie sie ist.
Die Funktion isset() prüft ob eine Variable überhaupt existiert. Amsonsten brauchen wir nur noch zu prüfen, ob $mode den boolschen Wert true hat; dabei verwenden wir === bzw. !==, damit der Wert nicht konvertiert wird. Und so sieht's aus:
PHP-Code:
if(!isset($mode) || $mode!==true) $mode=false;
Zu Deutsch: Falls $mode
nicht existiert,
oder $mode einen anderen Wert als den boolschen Wert true hat, dann...