Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过变量访问对象属性_Php - Fatal编程技术网

Php 通过变量访问对象属性

Php 通过变量访问对象属性,php,Php,我以前见过这样的问题,但我的特殊情况似乎是有人奇怪,我无法解决它-任何洞察将不胜感激 我正在尝试访问具有可变值的对象属性,即 $foo = new Object(); $foo->first = 'bar'; $array = array(0 =>'first', 1 =>'second'); $var = 0; return $foo->{$array[$var]}; 这将抛出一个错误“注意:未定义的属性:stdClass::$first”。删除大括号将返回相同

我以前见过这样的问题,但我的特殊情况似乎是有人奇怪,我无法解决它-任何洞察将不胜感激

我正在尝试访问具有可变值的对象属性,即

$foo = new Object();
$foo->first = 'bar';

$array = array(0 =>'first', 1 =>'second');

$var = 0;

return $foo->{$array[$var]};
这将抛出一个错误“注意:未定义的属性:stdClass::$first”。删除大括号将返回相同的结果

我不明白什么?(下面是实际代码和错误-错误记录在Drupal监视程序日志中。)

注意:未定义的属性: stdClass::$field\u portfolio\u district['und'][0]['nid']in 比较开始->加载调查问卷\u队列()


这就像一个符咒:

<?php
$foo = new StdClass();
$foo->first = 'bar';

$array = array(0 =>'first', 1 =>'second');

$var = 0;

echo $foo->{$array[$var]};
?>

但我怀疑这会起作用:

<?php
$foo = new StdClass();
$foo->first = array('a' => array('b' => 'test'));

$array = array(0 =>'first["a"]["b"]', 1 =>'second');

$var = 0;

echo $foo->{$array[$var]};
?>

这里的解决方案是eval(),但我强烈建议您不要使用eval或类似的方法。我只是想太花哨了。我要重构,请重构!通过字符串变量访问方法使调试变得非常困难。F.I.当使用变量访问函数时,不能在NetBean中使用“查找用法”。相信我,这可能是一个痛苦的屁股!
<?php
$foo = new StdClass();
$foo->first = array('a' => array('b' => 'test'));

$array = array(0 =>'first["a"]["b"]', 1 =>'second');

$var = 0;

echo $foo->{$array[$var]};
?>