Mailinglisten-Archive |
Am 17.03.2007 um 09:58 schrieb Remo Fritzsche: > if (isset($_GET['unknownIndex'])) { > $a = $_GET['unknownIndex']; > } Warum isset() (und auch empty()) anders arbeiten als der Wertevergleich, haben die anderen bereits erklärt. Aber noch eine kleine Ergänzung: Für isset() existiert ein Schlüssel mit dem Wert NULL nicht. Insofern wirst du die Zuweisung für $a nie erreichen, wenn unknownIndex NULL ist. Das wird dir weiter unten dann wieder eine Notice werfen, wenn du nicht vor der Bedingung eine Zuweisung im Stil von $a = null machst. Alternative wäre die Verwendung von array_key_exists(): $ php -r '$array = array("foo" => null); var_dump(isset($array ["foo"])); var_dump(array_key_exists("foo", $array));' bool(false) bool(true) Weil das Ganze dann relativ geschwätzig wird, dürften dich die beiden Funktionen hier interessieren: function ifsetor (&$var, $alt) { if (isset($var)) { return $var; } else { return $alt; } } function filterRequest (&$var, $regex) { if (isset($var) && preg_match($regex, $var)) { return $var; } else { return null; } } $a = ifsetor($_GET['unknownIndex'], null); ifsetor() macht im Prinzip das, was du oben mit isset() machst inklusive garantierter Zuweisung von $a. Ausgeschrieben: if (isset($_GET['unknownIndex'])) { $a = $_GET['unknownIndex']; } else { $a = null; } Viel interessanter ist filterRequest(): $a = filterRequest('=^[a-z]+$=', $_GET['unknownIndex']); Das ist im Prinzip ifsetor + Validierung. Es wird geprüft, ob $_GET ['unknownIndex'] existiert (keine Notice) und gleichzeitig der Wert mit Hilfe des Regulären Ausdrucks (=^[a-z]+$) nur durchgelassen, wenn er nur aus Buchstaben besteht. Sonst wird $a NULL. Gruss, Andreas
php::bar PHP Wiki - Listenarchive