如果作为数组或对象传递,则PHP变量变量不显示

时间:2014-10-18 06:28:25

标签: php arrays variables object

这适用于简单的变量。但它显示复杂变量的空结果。我错过了吗?或者还有其他方法。感谢。

#1. This works with simple variables.
$object = "fruit";
$fruit = "banana";

echo $$object;   // <------------ WORKS :outputs "banana".
echo "\n";
echo ${"fruit"}; // <------------ This outputs "banana".


#2. With complex structure it doesn't. am I missing something here?
echo "\n";
$result = array("node"=> (object)array("id"=>10, "home"=>"earth", ), "count"=>10, "and_so_on"=>true, );
#var_dump($result);

$path = "result['node']->id";
echo "\n";
echo $$path; // <---------- This outputs to blank. Should output "10".

2 个答案:

答案 0 :(得分:0)

不完全使用变量变量,但如果要将变量用作var名称,则eval应该可以使用

$path = "result['node']->id"; eval("echo $".$path.";");

答案 1 :(得分:0)

来自php.net's page on variable variables

  

变量变量采用变量的值并将其视为变量的名称。

问题是result['node']->id不是变量。 result是变量。如果打开PHP通知的错误报告,您将在输出中看到以下内容:

  

PHP注意:未定义的变量:result ['node'] - &gt; id ...

这可以解决如下:

$path = "result";
echo "\n";
echo ${$path}['node']->id;

$path周围的花括号是必需的。

  

为了将变量变量与数组一起使用,您必须解析一个   歧义问题。也就是说,如果您编写$$a[1],则解析器需要   了解您是否打算将$a[1]用作变量,或者是否需要$$a   作为变量,然后是该变量的[1]索引。语法   解决这种歧义的方法是:${$a[1]}用于第一种情况和   ${$a}[1]为第二个。

如果不存在,则该陈述等同于

${$path['node']->id}

将产生以下输出:

PHP Warning:  Illegal string offset 'node' in /var/www/html/variable.php on line 18
PHP Notice:  Undefined variable: r in /var/www/html/variable.php on line 18
PHP Notice:  Trying to get property of non-object in /var/www/html/variable.php on line 18