多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
#### 创建数据对象之:setAttr方法 * * * * * 1. 作用:如果数据对象中已存在指定数据,则更新;如果不存在,则创建。 setAttr()方法也叫修改器 2. setAttr()源码: ~~~ /** * 修改器 设置数据对象值 * @access public * @param string $name 属性名 * @param mixed $value 属性值 * @param array $data 数据 * @return $this */ public function setAttr($name, $value, $data = []) { if (is_null($value) && $this->autoWriteTimestamp && in_array($name, [$this->createTime, $this->updateTime])) { // 自动写入的时间戳字段 $value = $this->autoWriteTimestamp($name); } else { // 检测修改器 $method = 'set' . Loader::parseName($name, 1) . 'Attr'; if (method_exists($this, $method)) { $value = $this->$method($value, array_merge($data, $this->data)); } elseif (isset($this->type[$name])) { // 类型转换 $value = $this->writeTransform($value, $this->type[$name]); } } // 标记字段更改 if (!isset($this->data[$name]) || ($this->data[$name] != $value && !in_array($name, $this->change))) { $this->change[] = $name; } // 设置数据对象属性 $this->data[$name] = $value; return $this; } ~~~ 3.setAttr()范例 ~~~ <?php namespace app\index\controller; use app\index\model\Staff; class Index { public function index(){ //1.创建数据模型对象 $model = new Staff(); //2.setAttr()方法操作数据对象 //3.如属性不存在,则创建该属性 $model->setAttr('id',10); $model->setAttr('name','Jack'); $model->setAttr('age',20); //4.如属性已存在,则更新 $model->setAttr('id',11); $model->setAttr('name','Jackee'); $model->setAttr('age',21); //5.查看$model对象 dump($model); } } ~~~ 对象输出 ~~~ object(app\index\model\Staff)#5 (28) { //这里略去与本例无关的属性 ······ ["data":protected] => array(3) { ["id"] => int(11) ["name"] => string(4) "Jackee" ["age"] => int(21) } //这里略去与本例无关的属性 ······ } ~~~ 4.总结 setAttr( )方法,实际开发中并不常用,但在Model类源码中,却随处可见它的身影。该方法不仅可以创建数据对象,还可以更新数据对象。但是该方法只能一个个逐个处理数据,多个数据需要同时处理,就必须多次调用才可以实现。 * * * * * https://www.kancloud.cn/ldkt/tp5_model/236655