2011-10-06 166 views
3

要阅读在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

我认为PHP没有为它。这里有很多关于它的问题。 – Dani

+0

我试图找到他们,但不知道要搜索什么? – flori

+0

没有其他选择。如果您不想使用PHP的专用语法来解决这个问题,那么您将不得不忍受繁琐的语法副本。 – mario

回答

0

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

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

如果??前值存在,并且不NULL它返回一个,否则就从背后??取回退值。我喜欢它!

2

虽然这不能完全解决你的问题,在某些情况下,您可以用提取物($ _ 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

创意,它至少使事情看起来更整洁。 – eykanal

0

使用:“eval(foo,bar”)参见php手册中的:eval。

+0

你的意思是'eval('return $ foo')'? – flori

0

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

+0

我尝试过但不喜欢它。速度很慢,您无法再搜索完整的变量名称。也许IDE与他们的代码识别也会被激怒? – flori

相关问题