为了在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
}
}
答案 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
,则返回该值,否则它将从??
后面获取后备值。我喜欢它!