溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

TP6中超級(jí)函數(shù)app()有什么用

發(fā)布時(shí)間:2021-01-22 14:44:07 來源:億速云 閱讀:362 作者:小新 欄目:編程語言

小編給大家分享一下TP6中超級(jí)函數(shù)app()有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

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

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

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

這個(gè)函數(shù)如果你不帶任何參數(shù)直接打印是這樣的:
halt(app());
TP6中超級(jí)函數(shù)app()有什么用

不帶參數(shù)直接調(diào)用了think下的App類。

當(dāng)你帶上參數(shù)后它就調(diào)用了容器類Container。

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

bind('settings','app\admin\controller\Upgrade');或者:bind('settings',Upgrade::class);或者:
Container::getInstance()->bind('settings', Upgrade::class)

如圖:
TP6中超級(jí)函數(shù)app()有什么用
調(diào)用容器中類:
調(diào)用方式:

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

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

例如我們很多助手函數(shù):

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

在APP()助手函數(shù)面前只能算是小弟,因?yàn)橹挥靡粋€(gè)app()函數(shù)就可以替代絕大部分的助手函數(shù)。
舉例:

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

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

以上是“TP6中超級(jí)函數(shù)app()有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI