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