Избегайте дублирования кода в таких выражениях, как: isset ($ _ GET ['foo'] ['bar'])?$ _GET ['foo'] ['bar']: NULL; - PullRequest
3 голосов
/ 07 октября 2011

Для чтения неизвестных переменных в PHP часто я использую код, подобный следующему:

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

Мне не нравится писать имя переменной дважды. Это выглядит некрасиво и слишком долго для такой повседневной задачи.

Знаете ли вы лучшее решение? Просто использование оператора @ или подавление уведомлений вообще не вариант (плохая практика, медленно).
С пользовательской функцией и переменной по ссылке это как-то возможно:

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

Однако это создает новые нежелательные переменные с таким именем / путем. A var_dump($_GET) будет печатать:

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

Ответы [ 4 ]

2 голосов
/ 07 октября 2011

Хотя это не полностью решит вашу проблему, в некоторых случаях вы можете использовать extract ($ _ GET);

<?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";

?>
0 голосов
/ 24 июня 2015

Наконец, PHP7 предлагает решение. Да! Оператор объединения .

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

Если значение до ?? существует и не равно NULL, оно возвращает это значение, в противном случае оно получает запасное значение из-за ??. Я люблю это!

0 голосов
/ 07 октября 2011

Еще один способ перестроить вашу функцию - создать рекурсивную функцию, которая добавляет все установленные ключи в массив в качестве имен, а затем просто проверяет, используя функцию in_array ().Если найдено, верните значение.

0 голосов
/ 07 октября 2011

Использование: "eval (foo, bar") см. В руководстве по php для: eval.

...