## 创建数据对象:data()方法
#### 1. 功能:给模型对象$data赋值,将模型对象转为数据对象
>[info] 模型对象与数据对象,之间就差一个赋过值$data;
#### 2. 方法:data()其源代码如下:
>[info] 本教程如无特别说明:源码均指:Model.php 类文件中的内容。
文件位置:/thinkphp/library/think/Model.php
* 备注:注释为作者另加,源码中并没有
~~~
/**
* 设置数据对象值
* @access public
* @param mixed $data 数据或者属性名
* @param mixed $value 值
* @return $this
*/
public function data($data, $value = null) //$value可不传,不给时取默认值
{
if (is_string($data)) { //如何$data是字符串,则视为$data数组的键名
$this->data[$data] = $value; //给当前类data[$data键名]赋值:$value
} else {
// 清空数据
$this->data = [];
if (is_object($data)) {
//如参数$data是对象,将$data对象属性转关联数组给当前类的$data[]赋值
//注意:外部调用,仅限公共非静态属性可以转为关联数组
$data = get_object_vars($data); //对象属性转关联数组
}
if (true === $value) { //第二个参数是布尔值true:1,用获取器方法给$data[]赋值
// 数据对象赋值
foreach ($data as $key => $value) {
$this->setAttr($key, $value, $data);
}
} else { //将$data数组参数,直接绑定到到类的data[]属性上,完成初始化
$this->data = $data;
}
}
return $this; //返回数据对象
}
~~~
#### 3. 参数与返回值
* 分析源码可看出,data()方法支持三类参数:
| 序号 | 参数 | 说明 |
| --- | --- | --- |
| 1 | $string / 字符串 | 必须存在第2个参数,第一个是键名,第二个是值,用于给数据对象中$data属性数据元素逐个赋值 |
| 2 | $array / 数组 | 用于给对象中的$data属性批量赋值 |
| 3 | $object / 对象 | 将对象转关联数组后,批量给$data属性赋值 |
* 返回值:数据对象
#### 4. 实例演示:模型对象中$data属性赋值
>[info] Staff模型类创建与前面一样的,目前我们使用一个空的模型类就可以完成测试
* 自定义模型类: Staff.php
~~~
<?php
namespace app\index\model;
//导入模型类
use think\model;
class Staff extends model {
//自定义模型类代码
}
~~~
1. 逐个赋值:用双字符串参数实现
>[info] 第1个字符串是数组元素的键名,第2个是数组元素的值。
* 通过data方法的重复调用来实现对模型对象$data属性的逐个赋值
* 控制器:Index.php
~~~
<?php
namespace app\index\controller;
//导入模型类
use app\index\model\Staff;
class Index {
public function index(){
//1.创建模型对象$model
$model = new Staff();
//2.重复调用模型对象的data()方法,完成对该对象属性$data的赋值
//赋值成功,则完成模型对象向数据对象的转换
$model -> data('id','10'); //$data['id'] = 10
$model -> data('name','Peter'); //$data['name'] = 'Peter'
$model -> data('age',30); //$data['age'] = 30
//3.查看获取到了原始数据的模型对象
dump($model);
}
}
~~~
* 浏览器查看结果: tp5.com/index.php/index/index
> tp5.com 是我们之前配置好的一个本地域名
~~~
object(app\index\model\Staff)#5 (28) {
//这里略去与本例无关的属性
······
["data":protected] => array(3) {
["id"] => string(2) "10"
["name"] => string(5) "Peter"
["age"] => int(30)
}
//这里略去与本例无关的属性
······
}
~~~
* * * * *
2. 批量赋值:用数组实现
>[info] 我们在代码中的$data是创建的用来赋值的数组,是数据对象的数据源,注意二者区别
* 控制器:Index.php :
~~~
<?php
namespace app\index\controller;
//导入模型类
use app\index\model\Staff;
class Index {
public function index(){
//1.创建模型对象$model
$model = new Staff();
//2.创建数组$data,用作数据对象数据源
$data = [];
$data['id'] = 1010;
$data['name'] = 'Peter';
$data['age'] = 50;
//3.调用模型对象data方法,将$data数组赋值该对象的$data属性
//完成数据对象的创建
$model -> data($data);
//3.查看对象
dump($model);
}
}
~~~
>[warning] 特别提示:数组来实例化模型对象,无法实现逐个赋值。它的每一次操作,都是对模型对象$data属性的整体赋值。
* * * * *
3. 用对象来实例化模型对象
* 控制器代码:Index.php :
~~~
<?php
namespace app\index\controller;
//导入模型类
use app\index\model\Staff;
class Index {
public function index(){
//1.创建模型对象$model
$model = new Staff();
//2.创建标准(通用)对象 $data
$data = new \stdClass;
//3.给标准对象$data添加属性
$data -> id = 1001;
$data -> name = 'ThinkPHP5';
//4.调用模型对象data方法,将$data对象的属性逐个赋值给该对象$data属性
//完成数据对象的创建
$model -> data($data);
//3.查看对象
dump($model);
}
}
~~~
* 浏览器查看结果: tp5.com/index.php/index/index
> tp5.com 是我们之前配置好的一个本地域名
~~~
object(app\index\model\Staff)#5 (28) {
//这里略去与本例无关的属性
······
["data":protected] => array(2) {
["id"] => string(2) "1001"
["name"] => string(5) "ThinkPHP5"
}
//这里略去与本例无关的属性
······
}
~~~
>[warning] 用对象来实例化创建数据对象,即可以逐个赋值,也可以整体赋值,非常灵活
* * * * *
#### 5. 总结:
>[success] data()方法创建数据对象,非常直观和高效,特别是对象参数,显得更加的高级和优雅,与其它优秀框架非常相似。data方法的三种参数,重点掌握:【数组】
- 前言[随时更新]
- 开发环境
- 1.Mac环境
- 2.windows环境
- 模型对象
- 1.创建模型对象
- 2.模型初始化
- 数据对象
- 1.定义数据对象
- 2.创建数据对象
- 1.data方法
- 2.setAttr方法
- 3.__set方法
- 4.查询数据对象
- 1.getData方法
- 2.getAttr方法
- 3.__get方法
- OOP难点总结
- 1.get_class( )实例讲解
- 2.get_called_class( )实例讲解
- 3.__call( )实例讲解
- 3.__callStatic( )实例讲解
- 4.call_user_func_array函数[重点]
- 5.普通方法与静态方法
- 6.在Model源码中的应用
- 7.new static 延迟静态绑定
- PHP标准化规范
- 查询数据
- 1.获取单条:get静态方法
- 2.获取单条:对象查询
- 3.获取多条:all静态方法
- 4.获取多条:对象查询
- 5.获取字段值:value方法
- 6.获取列值:column方法
- 7.动态查询:getBy字段名
- 8.助手函数:model查询
- 9.加载器:Loader类查询
- 10.数据库与模型查询对比
- 新增数据
- 1.sava方法
- 2.savaAll方法
- 3.create静态方法
- 4.insert静态调用
- 更新数据
- 1.单条更新:save方法
- 2.批量更新:saveAll方法
- 3.静态更新:update方法
- 4.查询类Query直接更新
- 5. 闭包更新
- 删除数据
- 1.删除当前记录:delete
- 2.静态条件删除:destory
- 获取器
- 1.模型方法:set属性Attr
- 修改器
- 1.set属性Attr
- 时间戳
- 1.MySQL中日期类型复习
- 2.时间戳功能详解
- 软删除[重点]
- 1.traits详解[选学内容]
- 2.SoftDelet类源码分析
- 3. delete实例删除
- 4.destroy条件删除
- 5.restore恢复数据
- 类型转换
- 1. 规则设置
- 2. 实例演示
- 查询范围
- 1. 基本概念
- 2.实例演示