0

我有课

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() 我做错了什么?感谢您的任何帮助。

4

3 回答 3

0
foreach ($data as $key => $value) {
   $this->$key = $value;
}
于 2012-05-14T12:06:10.450 回答
0

试试这个

class BaseModel{
     function __construct($data=null){
          if($data!=null)
        {
          //set $id and $name
          $this->id = $data['id'];
          $this->name = $data['name'];
        }
     }
}
于 2012-05-14T12:08:00.183 回答
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
于 2012-05-14T12:12:29.873 回答