phpbar.de logo

Mailinglisten-Archive

[php] Index von Arrays führen zu <Notes>

[php] Index von Arrays führen zu <Notes>

Andreas Ahlenstorf lists at ahlenstorf.ch
Sam Mar 17 11:35:44 CET 2007


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