我有一个数组作为对象属性, $ obj-> _image = ['size'=> '10']; 并希望动态访问它,例如:(当然对象已初始化并存在,只是跳过以使帖子更短。 print $ obj-> _image ['size'] 工作应该如此。)
$obj->get('image','size');
public function get($item,$element = '') {
if (!empty($element)) $element = "['$element']";
$item = "_$item$element";
return $this->$item;
}
但得到:未定义的属性:obj :: $ _ image ['size']
尝试使用{},$$ - 但看起来我错过了一些东西..
答案 0 :(得分:0)
您的问题是您正在尝试访问属于数组的属性,因此您不能像执行此操作那样执行此操作。试试这个
class a
{
private $_image = array("size" => 10);
public function get($item, $element = '')
{
$prop = "_$item";
if (property_exists(__CLASS__, $prop))
{
if (empty($element))
{
return $this->{$prop};
}
if(array_key_exists($element, $this->{$prop})){
return $this->{$prop}[$element];
}
}
throw new Exception("'$item' or '$element' don't exist");
}
}
$a = new a;
echo $a->get("image", "size");
您的代码的问题是您的属性是一个数组,因此您首先需要访问数组$this->{"_$prop"}
,然后访问数组$this->{"_$prop"}[$el]
中的元素