在ThinkPHP中数据对象的创建
1、数据对象的创建
数据对象也就是父类模型中的$this -> data,在模型实例化的时候数据对象还是一个空数组,在后来使用了魔术方法__set来设置了数据对象的值。
既然data属性之前是空数组,后期使用的时候需要先给其赋值,也就说明,在使用数据对象的时候必须先创建数据对象。而__set是设置数据对象的一种方法;但是这种方式在使用的时候并不方便,原因是设置一个属性就得写一行代码;因此在ThinkPHP中系统还提供另外一种批量设置数据对象的方法:create方法。
语法:
$model -> create();
实现的底层代码:
public function create($data='',$type='') {
// 如果没有传值默认取POST数据
if(empty($data)) {
$data = I('post.');
}elseif(is_object($data)){
$data = get_object_vars($data);
}
// 验证数据
if(empty($data) || !is_array($data)) {
$this->error = L('_DATA_TYPE_INVALID_');
return false;
}
通过它的实现代码,可以发现如果不给create方法传递参数,则其默认使用post中的数据。
public function add(){
if(IS_POST){
//处理表单提交
//$post = I('post.');
//添加数据
//实例化模型
$model = M('Dept');
$model -> create();
$result = $model -> add();
//判断返回值
if($result){
//添加成功
$this -> success('添加成功',U('showList'),5);
}else{
$this -> error('添加失败');
}
}else{
//实例化模型
$model = M('Dept');
//查询操作
$data = $model -> where('pid = 0') -> select();
//变量分配
$this -> assign('data',$data);
//展示模板
$this -> display();
}
}
关于是否接收数据对象创建方法返回值说明:
如果想使用打印方法去查看数据是否正确则可以接收返回值,如果不想打印,则可以不接收,则在使用CURD操作的时候也不需要给具体的操作方法传递参数。如果在使用自动验证的时候,则必须要接收返回值。