使用字符串访问对象的数组属性

时间:2017-04-24 11:53:46

标签: php

我尝试使用字符串变量访问具有数组形式的对象属性,但是当字符串包含索引选择时,我不能这样做。看看这个例子..我要做的是使用$ access3 like string

$dummy = new stdClass();
$dummy->testNormal = 'itemNormal';
$dummy->testArray = array('item1', 'item2');

$access1 = 'testNormal';
$access2 = 'testArray';
$access3 = 'testArray[0]';

echo 'try access1: ' . $dummy->{$access1} . '<br />';
echo 'try access2: ' . $dummy->{$access2}[0] . '<br />';
echo 'try access3: ' . $dummy->{$access3} . '<br />';
echo 'try direct: ' . $dummy->testArray[0] . '<br />';

上面的代码将返回

try access1: itemNormal
try access2: item1
--- ERROR MESSAGE -- 
try access3:        <-- does not contain anything because of error, my expectation is it will be "item1"
try direct: item1

这对php来说是不可能的吗?

1 个答案:

答案 0 :(得分:0)

$access_handler = explode('[', $access3);
// get array name
$array_name = $access_handler[0];
// get array index
$array_index = substr($access_handler[1], 0, -1);
// call the property
echo $dummy->$array_name[$array_index];

您可以为此创建功能。否则你将不得不使用eval来评估你的字符串,但不建议这样做。此外,还有很多方法可以将索引与数组名称分开,然后像在此示例中一样运行