3 Stimmen

Vermeiden Sie doppelten Code in Anweisungen wie: isset($_GET['foo']['bar']) ? $_GET['foo']['bar'] : NULL;

Um unbekannte Variablen in PHP zu lesen, verwende ich oft Code wie den folgenden:

$bar = isset($_GET['foo']['bar']) ? $_GET['foo']['bar'] : NULL;

Ich mag es nicht, den Namen der Variablen zweimal zu schreiben. Das sieht einfach hässlich aus und ist zu lang für eine so alltägliche Aufgabe.

Kennen Sie eine bessere Lösung? Verwenden Sie einfach die @ Operator oder die Unterdrückung von Meldungen ist überhaupt keine Option (schlechte Praxis, langsam).
Mit einer benutzerdefinierten Funktion und einer Referenzvariablen ist es irgendwie möglich:

function ifset(&$value)
{
    if(isset($value)) return $value;
}
$bar = ifset($_GET['foo']['bar']); // $_GET is empty

Dadurch werden jedoch stillschweigend neue, unerwünschte Variablen mit diesem Namen/Pfad erstellt. A var_dump($_GET) drucken würde:

array(1) {
  ["foo"]=>
  array(1) {
    ["bar"]=>
    NULL
  }
}

2voto

Eugene Punkte 313

Obwohl dies Ihr Problem nicht vollständig lösen wird, können Sie in einigen Fällen extract($_GET) verwenden;

<?php

/* Suppose that $var_array is an array returned from
   wddx_deserialize */

$size = "large";
$var_array = array("color" => "blue",
                   "size"  => "medium",
                   "shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");

echo "$color, $size, $shape, $wddx_size\n";

?>

0voto

user187291 Punkte 52315

Benutzen Sie: "eval(foo,bar") siehe in einem php-Handbuch für: eval.

0voto

Eugene Punkte 313

Eine andere Möglichkeit, Ihre Funktion umzugestalten, wäre eine rekursive Funktion, die alle eingestellten Schlüssel als Namen in ein Array einfügt und dann einfach mit der Funktion in_array() überprüft. Wenn gefunden, Wert zurückgeben.

0voto

flori Punkte 11900

Endlich bringt PHP7 eine Lösung. Ja! Die Koaleszenz-Operator .

$bar = $_GET['foo']['bar'] ?? NULL;

Wenn der Wert vor der ?? existiert und ist nicht NULL wird dieser zurückgegeben, andernfalls wird der Fallback-Wert hinter der ?? . Ich liebe es!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X