我有课
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() 我究竟做错了什么? 谢谢你的帮助。
答案 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