我希望在模型中更新每个列的getter和setter,而不是在我的模型中使用__get
和__set
,但它不起作用。
这是一个例子:
class Video extends CI_Model {
private $video_id = null;
private $title;
private $url;
private $thumb;
private $width;
private $height;
public function __set($name, $value){
if(!$this->video_id) return false;
if(property_exists($this, $name))
{
$data = array(
$name => trim($this->security->xss_clean($value)),
'updated' => date('Y-m-d H:i:s'),
);
if($this->db->update('users', $data, array('video_id' => (int)$this->video_id)))
{
return $this->db->affected_rows();
}
else
{
return $this->db->_error_message();
}
}
}
}
然后从我的控制器我做:
$this->video->width(780);
产生:
<b>Fatal error</b>: Call to undefined method Video::width() in <b>/home/crazy/public_html/dev/application/controllers/admin.php</b> on line <b>169</b><br />
答案 0 :(得分:1)
首先,你需要仔细read the documentation这个东西。你正在使用错误的魔术方法。 __set
用于设置对象属性:
$obj->width = 780; // Will be translated to:
$obj->__set('width', 780);
如果您使用__call
,那么方法将会重载:
$obj->width(780); // Will be translated to:
$obj->__call('width', array(780));
其次,您需要查看CI_Model
的CI源代码。如果我链接到正确的版本,那么它会设置自己的__get
方法,如果您想设置自己的getter,则必须考虑该方法。