## __set( )方法自動創建數據對象原始數據
>[info] 其實就是通過魔術方法動態創建屬性的方法來生成數據對象
#### 2. 源碼:
>[info] 本教程如無特別說明:源碼均指:Model.php 類文件中的內容。
文件位置:/thinkphp/library/think/Model.php
~~~
/**
* 修改器 設置數據對象的值
* @access public
* @param string $name 名稱
* @param mixed $value 值
* @return void
*/
public function __set($name, $value) //魔術方法來動態設置數據對象$data[]
{
$this->setAttr($name, $value); //鍵值對方式寫入
}
~~~
>[info] 看了源碼,發現了一個熟悉的身影:setAttr( )方法,你猜對了,這個方法在內部就是通過setAttr方法來給$data屬性賦值,來完成數據對象的創建。
* 小常識:魔術方法:
>[info] PHP面向對象編程中,如果外部訪問對象中一個不存在的屬性或方法時, 為了避免訪問錯誤而定義的一組方法:魔術方法。
#### 3. 參數所返回值:
* 參數:
| 序號 | 參數 | 說明 |
| --- | --- | --- |
| 1 | $name / string 字符串 | 數據對象中$data屬性數組元素的鍵名 |
| 2 | $value / mixed 復合類型 | 數據對象中$data屬性數組元素的值 |
* 返回值:未定義,可以視為無
#### 4. 實例演示:
1. 任務:給模型對象逐個賦值,創建數據對象
>[info] Staff模型類創建與前面一樣的,目前我們使用一個空的模型類就可以完成測試
* 自定義模型類: Staff.php
~~~
<?php
namespace app\index\model;
//導入模型類
use think\model;
class Staff extends model {
//自定義模型類代碼
}
~~~
* 控制器:Index.php
~~~
<?php
namespace app\index\controller;
//導入模型類
use app\index\model\Staff;
class Index {
public function index(){
//1.創建模型對象$model
$model = new Staff();
//2.__set()方法創建數據對象
$model -> id = 50;
$model -> name = 'Tom';
$model -> age = 18;
//3.查看該數據對象
dump($model);
}
}
~~~
>[success] Index.php 代碼中并沒有出現 __set() 方法,不要感到奇怪,因為魔術方法是自動調用用。
> 在本例中,我們給模型對象$model添加了三個屬性,其類內部的__set()方法,將會自動添加到類屬性$data數組中,完成數據對象的創建。
* 瀏覽器查看結果: tp5.com/index.php/index/index
> tp5.com 是我們之前配置好的一個本地域名
~~~
object(app\index\model\Staff)#5 (28) {
//這里略去與本例無關的屬性
······
["data":protected] => array(3) {
["id"] => int(50)
["name"] => string(3) "Tom"
["age"] => int(18)
}
//這里略去與本例無關的屬性
······
}
~~~
#### 5. 總結:
>[success] 用魔術方法給模型對象初始化,來創建數據對象,實際開發中經常用到。特別是在CURD操作中,這種方式,符合ORM(對象關系映射),直觀高效!請同學們盡快的熟悉這種語法方式。
- 前言[隨時更新]
- 開發環境
- 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.實例演示