30 November 2005
Combining Implicit Evaluation of Objects with Accessing Arrays
It turns out, that while you can preform implicit evaluation of an object, or a variable, or a variable’s associative array members, trying to merge them all has unexpected behavior.
class foo {
var $arr1;
var $arr2;
}
$foo = new foo();
$foo->arr1 = array(5);
$foo->arr2 = array(5);
function accessFirstElement ($object, $property) {
echo $object->$property[0];
}
accessFirstElement ($foo, “arr1″);
In writing this, I would expect PHP to evaluate accessFirstElement as
echo $foo->arr1[0];
But really, it evaluates more akin to
$var = $arr1[0]; // == ""
echo $object->$var; // $object->""
Which tells me that array evaluation is processed before implicit evaluation. The proper function reads
function accessFirstElement ($object, $property) {
$temp = $object->$property;
echo $temp[0];
}

