为了在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
然而,这会无声地创建新的不需要的变量,名称为/path。var_dump($_GET)
将打印:
array(1) {
["foo"]=>
array(1) {
["bar"]=>
NULL
}
}
虽然这不能完全解决您的问题,但在某些情况下,您可以使用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";
?>
使用:"eval(foo,bar")参见php手册中的:eval.
重新设计函数的另一种方法是创建一个递归函数,该函数将所有set键作为名称添加到数组中,然后简单地使用in_array()函数进行检查。如果找到,返回值
最后PHP7带来了一个解决方案。是啊!合并操作符。
$bar = $_GET['foo']['bar'] ?? NULL;
如果??
之前的值存在并且不是NULL
,则返回该值,否则将从??
后面获取回退值。我喜欢!