避免在以下语句中重复代码:isset($ _ GET ['foo'] ['bar'])? $ _GET ['foo'] ['bar']:NULL;

时间:2011-10-06 23:12:05

标签: php coding-style refactoring

为了在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

然而,这会使用该名称/路径静默创建新的不需要的变量。打印var_dump($_GET)

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

4 个答案:

答案 0 :(得分:2)

虽然这不能完全解决您的问题,但在某些情况下您可以使用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";

?>

答案 1 :(得分:0)

使用:“eval(foo,bar”)在php手册中查看:eval。

答案 2 :(得分:0)

重新设计函数的另一种方法是创建一个递归函数,将所有set键作为名称添加到数组中,然后使用in_array()函数进行检查。如果找到,返回值。

答案 3 :(得分:0)

最后PHP7带来了解决方案。 是啊! coalesce operator

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

如果??之前的值存在且不是NULL,则返回该值,否则它将从??后面获取后备值。我喜欢它!