tp5 魔法函式

2021-09-01 00:04:28 字數 1715 閱讀 1094

在thinkphp5中,使用了大量的魔法函式。

為了讓大家在學習thinkphp5時,能夠更清楚的明白thinkphp5的原理,我們使用以下示例來學習一下__set()__get()魔法函式。

**注意:**是__不是_

<?php

class test

$test = new test();

echo $test->hi;

測試結果很明顯,輸出了公有屬性的值。

如果將$hi改為私有或是保護型別時就會報錯:

<?php

class test

$test = new test();

echo $test->hi;

我們知道,從安全的角度出發,類中所有的屬性我們都會宣告為privateprotected。所以,如果想輸出乙個私有屬性,往往都是按下面的方法進行處理的。

<?php

class test

}$test = new test();

echo $test->gethi();

測試結果表明:同樣輸出了hi的值

有了魔法函式後,想實現相同的功能,我們還可以這樣寫:

<?php

class test

}$test = new test();

echo $test->hi;

我們看到,當呼叫hi這個屬性時,由於並不存在可以直接供我們呼叫的hi屬性(只有public型別的屬性才能被直接呼叫),那麼就自動執行了__get()方法,並將$name的值置為hi, 然後執行後續的**。

thinkphp5在獲取乙個物件後,可以直接將資料表中的字段值做為屬性輸出,就是利用的這個方法。

示例**如下:

<?php

class test

else }}

$test = new test();

echo $test->name;

echo $test->***;

var_dump($test->hello);

注意:此時最後一行hello不管換成任何屬性(字母),都可以輸出陣列內容

有了剛剛的__get(),__set()理解起來也就簡單了。在thinkphp5中,我們在進行資料的新增或更新時,會直接對乙個物件的屬性進行賦值。我們當然知道,在沒有接觸到魔法函式以前,如果這個類中並不存在這個屬性,或是這個屬性不是public型別,那麼我們直接賦值時就會發生乙個異常,__set()就是用來解決這些問題的。

<?php

class test

else

}public function __set($name, $value)

}$test = new test();

$test->name = '李四';

$test->*** = '1';

echo $test->name . '

';echo $test->***;

//並不存在hello欄位

tp5 助手函式

一些常用的操作方法封裝了助手函式,便於使用,包含如下 助手函式 描述abort 中斷執行並傳送http狀態碼 action 呼叫控制器類的操作 cache 快取管理 config 獲取和設定配置引數 controller 例項化控制器 cookie cookie管理 db例項化資料庫類 debug ...

tp5 鉤子函式應用

class test return zzzzz 自定義標籤位 3.控制器方法內需要的地方偵聽行為 think hook listen zzzzz params 自定義 方法二 1.home模組的公共檔案 common.php 或控制器方法內繫結行為到標籤位 2.控制器方法內需要的地方偵聽行為 thi...

TP5常量參考

ext 類庫檔案字尾 php think version 框架版本號ds 當前系統的目錄分隔符 think path 框架系統目錄 root path 框架應用根目錄 lib path 系統類庫目錄 預設為 think path.library core path 系統核心類庫目錄 預設為 lib ...