快來了解下TP6中的超級函數app()!

下面由thinkphp框架教程欄目給大家介紹thinkphp框架中的超級函數app(),希望對需要的朋友有所幫助!

快來了解下TP6中的超級函數app()!

tp6中的助手函數app(),是一個包含極廣,涵蓋極深,作用巨大的助手函數,他可以調用很多方法,也是很多助手函數 的集合。

首先這是在helper.php中定義的一個助手函數,我們來看一下:

if?(!function_exists('app'))?{ ????/** ?????*?快速獲取容器中的實例?支持依賴注入 ?????*?@param?string?$name????????類名或標識?默認獲取當前應用實例 ?????*?@param?array??$args????????參數 ?????*?@param?bool???$newInstance?是否每次創建新的實例 ?????*?@return?object|App ?????*/ ????function?app(string?$name?=?'',?array?$args?=?[],?bool?$newInstance?=?false) ????{ ????????return?Container::getInstance()->make($name??:?App::class,?$args,?$newInstance); ????}}

這個函數如果你不帶任何參數直接打印是這樣的:
halt(app());
快來了解下TP6中的超級函數app()!

不帶參數直接調用了think下的App類。

當你帶上參數后它就調用了容器類Container。

容器類中裝載了絕大多數我們常用的具有27種之多的依賴注入類。
如下:
快來了解下TP6中的超級函數app()!
在任何時候我們都可以往容器中注入新的類。
比如我們注入一個Upgrade類到容器中:

bind('settings','appadmincontrollerUpgrade');或者:bind('settings',Upgrade::class);或者: Container::getInstance()->bind('settings', Upgrade::class)

如圖:
快來了解下TP6中的超級函數app()!
調用容器中類:
調用方式:

app('settings')->upgradeTask($this->request);或: Container::getInstance()->make('settings')->upgradeTask($this->request)

也就是app()助手函數不僅可以直接獲取App類中的方法,還可以獲取容器中所有的依賴注入類中的方法。容器是用來更方便的管理類依賴及運行依賴注入的工具。
依賴注入其實本質上是指在構造函數中對其他需要使用的類迅速實例化。
依賴注入的類統一由容器進行管理。

例如我們很多助手函數:

助手函數 描述
abort	中斷執行并發送HTTP狀態碼 app	快速獲取容器中的實例?支持依賴注入 bind	快速綁定對象實例 cache	緩存管理 class_basename	獲取類名(不包含命名空間)class_uses_recursive	獲取一個類里所有用到的traitconfig	獲取和設置配置參數 cookie	Cookie管理 download	獲取thinkresponseDownload對象實例 dump	瀏覽器友好的變量輸出 env	獲取環境變量 event	觸發事件 halt	變量調試輸出并中斷執行 input	獲取輸入數據?支持默認值和過濾 invoke	調用反射執行callable?支持依賴注入 json	JSON數據輸出 jsonp	JSONP數據輸出 lang	獲取語言變量值 parse_name	字符串命名風格轉換 redirect	重定向輸出 request	獲取當前Request對象 response	實例化Response對象 session	Session管理 token	生成表單令牌輸出 trace	記錄日志信息 trait_uses_recursive	獲取一個trait里所有引用到的traiturl	Url生成 validate	實例化驗證器 view	渲染模板輸出 display	渲染內容輸出 xml	XML數據輸出 app_path	當前應用目錄 base_path	應用基礎目錄 config_path	應用配置目錄 public_path	web根目錄 root_path	應用根目錄 runtime_path	應用運行時目錄

在APP()助手函數面前只能算是小弟,因為只用一個app()函數就可以替代絕大部分的助手函數。
舉例:

例如我們調用配置文件: config() 實際我們可以這樣寫:app('config')->get()又例如:request()->time()?可以寫作:app('request')->time()

對于其他的助手函數,app()都是一樣打包全收。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享