我尝试使用字符串变量访问具有数组形式的对象属性,但是当字符串包含索引选择时,我不能这样做。看看这个例子..我要做的是使用$ 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来说是不可能的吗?
答案 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来评估你的字符串,但不建议这样做。此外,还有很多方法可以将索引与数组名称分开,然后像在此示例中一样运行