PHP通过var名称设置数据

时间:2012-05-14 12:02:40

标签: php

我有课

class User extends BaseModel{
     public $id;
     public $name;
}

class BaseModel{
     function __construct($data=null){
          if($data!=null)
          //set $id and $name
     }
}

我想设置$ id,$ name以及通过调用

扩展BaseModel的任何其他数据
$test = new User(array('id'=>1,'name'=>'user name'))

我尝试使用

$this->__set($arrayKey,$arrayValue);

但是我得到了错误:致命错误:调用未定义的方法User :: __ set() 我究竟做错了什么? 谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

foreach ($data as $key => $value) {
   $this->$key = $value;
}

答案 1 :(得分:0)

试试这个

class BaseModel{
     function __construct($data=null){
          if($data!=null)
        {
          //set $id and $name
          $this->id = $data['id'];
          $this->name = $data['name'];
        }
     }
}

答案 2 :(得分:0)

只需遍历数据并分配每个属性:

class BaseModel {
     function __construct($data = NULL) {
          foreach ((array) $data as $k => $v) {
              $this->$k = $v;
          }
     }
}

您收到错误__set()未被定义的原因是因为您没有定义它。虽然__set()是一种神奇的方法,但如果你想对它做一些事情,你仍然必须定义它的行为。

  

http://www.php.net/manual/en/language.oop5.overloading.php#object.set

     将数据写入不可访问的属性时运行

__set

这意味着如果您尝试在不允许的范围内“设置”类变量(如私有或受保护的变量),则此函数将运行。

class Test {
    private $var;
}

$c = new Test;
$c->var = 1; // Error, or call __set if defined