将值赋给对象属性即数组

时间:2015-05-19 18:09:25

标签: php oop object

我有一个公共属性主要是数组的对象。我写了以下两个函数:

public function updateProperty($property, $key, $value) {
    if ($key!=null) $this->$property[$key]=$value;
    else $this->$property=$value;
}

public function getProperty($property, $key=null) {
    if ($key!=null) return $this->$property[$key];
    else return $data;
}

当我尝试使用这些功能时,我总是收到以下警告:

  

警告:非法字符串偏移'id'

如果我将getProperty函数更改为以下版本,那么一切正常,但我也无法弄清楚如何更改updateProperty。为什么我会收到此警告?

public function getProperty($property, $key=null) {
    $data=$this->$property;
    if ($key!=null) return $data[$key];
    else return $data;
}

2 个答案:

答案 0 :(得分:1)

假设您有一个类属性$datafields,并且您将方法调用为$class->getProperty('datafields','firstData');,那么您需要一个如您所示的变量属性,但是因为访问它需要{}消除歧义使用索引的数组:

return $this->{$property}[$key];

$this->{$property}[$key] = $value;

答案 1 :(得分:0)

public function updateProperty($property, $key, $value) { if ($key!=null) $this->$property[$key]=$value; else $this->$property=$value; }

此处,$value是您要为$key数组$property分配的新值。

不确定为什么要这样做,但当您说:else $this->$property = $value时,您将$property引用为值,而不是array。所以在此之后$property不再是一个数组。

假设您多次调用此方法,一旦$property丢失了它作为数组的位置并变为纯粹值,它将尝试在后续调用中更新$property[$key]。这可能是它抱怨非法抵消的原因。

我只是想知道你是否可以这样做:

public function updateProperty($property, $key, $value) {
    if ($key!=null) 
       $this->$property[$key]=$value;
}