創建數據對象: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