假设我们有这段代码(简化示例):
$propertyName = 'items';
$foo = new \stdClass;
$foo->$propertyName = array(42);
在这一点上,我想编写一个表达式,计算出对数组内值的引用。
是否有可能做到这一点?如果是这样,怎么做?
将“完成工作”但不是我正在寻找的答案是:
// Not acceptable: two statements
$temp = &$foo->$propertyName;
$temp = &$temp[0];
但是为什么要把它写成两个语句呢?好吧,因为这不起作用:
// Will not work: PHP's fantastic grammar strikes again
// This is actually equivalent to $temp = &$foo->i
$temp = &$foo->$propertyName[0];
当然&$foo->items[0]
是另一个不可接受的解决方案,因为它修复了属性名称。
如果有人想知道奇怪的要求:我在一个循环中执行此操作,其中$foo
它本身是对图中某个节点的引用。任何涉及的解决方案$temp
都需要unset($temp)
事后进行,以便$temp
下一次迭代的设置不会完全弄乱图形;如果您对引用不是非常小心,则可能会忽略此unset
要求,因此我想知道是否有一种方法可以编写此代码,从而减少引入错误的可能性。