创建数据对象:data()方法
1. 功能:给模型对象$data赋值,将模型对象转为数据对象
模型对象与数据对象,之间差异就在于模型对象$data是否赋值;
2. 方法:data()其源代码如下:
~~~
/**
* 设置数据对象值
* @access public
* @param mixed $data 数据或者属性名
* @param mixed $value 值
* @return $this
*/
public function data($data, $value = null)
{
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属性赋值
(1)逐个赋值:用双字符串参数实现
~~~
<?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);
}
}
~~~
(2)批量赋值:用数组实现
~~~
<?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);
}
}
~~~
(3)用对象来实例化模型对象
~~~
<?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);
}
}
~~~
输出
~~~
object(app\index\model\Staff)#5 (28) {
//这里略去与本例无关的属性
······
["data":protected] => array(3) {
["id"] => string(2) "10"
["name"] => string(5) "Peter"
["age"] => int(30)
}
//这里略去与本例无关的属性
······
}
~~~
data方法的三种参数,重点掌握:【数组】
- 目录
- 5.0.10环境配置
- 5.0.10控制器模型对象
- 5.0.10模型初始化
- 5.0.10定义数据对象
- 5.0.10创建数据对象data()方法
- 5.0.10创建数据对象-setAttr方法
- 5.0.10创建数据对象__set()方法
- 5.0.10查询数据对象getData()
- 实例
- 5.0.10保存数据save()方法
- 5.0.10保存数据saveAll()
- 5.0.10更新数据save()
- 5.0.10批量更新数据saveAll()
- 5.0.10删除数据delete()
- 5.0.10删除数据destroy()
- 5.0.10traits详解
- ThinkPHP 5.0 速查表
- 注释
- 环境变量配置
- Model分层
- MVC 逻辑服务数据
- Model分层及多对多关联的建立
- 控制器调用逻辑层
- Session
- 子域名session共享
- 系统错误
- 版本错误
- 返回错误
- Token令牌及身份识别
- 关联查询
- 安装
- Git安装
- Composer
- 扩展
- Composer类
- 非Composer类
- 引用第三方库
- 自定义命令行
- 计划任务
- 调试
- 调试模式
- 监听SQL
- 数据库调试
- 单元测试
- 初始化
- 控制器初始化
- 模型初始化
- 数据缓存
- 实战
- 版本升级
- 从V5.0.17升级到V5.0.18