laravel中 aliases別名的原理是什么?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)東勝免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。建立如下文件upload.php,內(nèi)容為
<?php namespace test\test2; class upload{ public function test(){ return 123; } }
2 建立文件index.php,內(nèi)容為
<?php namespace b; require('upload.php'); class_alias ( '\test\test2\upload' , 'upload'); $a=new \upload(); echo $a->test();
瀏覽器執(zhí)行index.php,成功輸出結(jié)果123;
可以看到class upload在命名空間test\test2下 但是new upload的時(shí)候 并沒(méi)有new \test\test2\upload 而是直接new \upload,原因不多說(shuō),就是因?yàn)楹瘮?shù)class_alias導(dǎo)致的.具體的這個(gè)函數(shù)的用法可以參考手冊(cè)。這里要補(bǔ)充說(shuō)明class_alias的第3個(gè)參數(shù)默認(rèn)為true,手冊(cè)上的意思是Whether to autoload if the original class is not found.是什么意思了,還是通過(guò)例子說(shuō)明 ,把index.php修改如下
<?php namespace b; //require('upload.php'); spl_autoload_register(function($class){ $num=strrpos($class,'\\'); $num++; $file=substr($class, $num).'.php'; require($file); }); class_alias ( '\test\test2\upload' , 'upload'); $a=new \upload(); echo $a->test();
可以看到我注釋掉了require('upload.php'),但是代碼還是成功執(zhí)行了。有了上面的例子說(shuō)明,就能看懂laravel的別名實(shí)現(xiàn)機(jī)制了.
在laravel中,比方說(shuō)我需要使用Log類,我們通過(guò)use Log; Log::info();就能使用記錄日志了.下面來(lái)分析原理
laravel的加載過(guò)程這里不分析,中間有一步會(huì)執(zhí)行如下這個(gè)'Illuminate\Foundation\Bootstrap\RegisterFacades'的bootstrap方法;
class RegisterFacades { public function bootstrap(Application $app) { //......省略...... AliasLoader::getInstance($app->make('config')->get('app.aliases'))->register(); } }
$app->make('config')->get('app.aliases')這一步讀取了config文件夾下的app.php的配置文件,這個(gè)配置文件里面我們定義了別名列表.
意思就是說(shuō)如果是需要使用別名 ,必須在配置文件中注冊(cè)別名
例如配置文件中有一行配置為'Log' => Illuminate\Support\Facades\Log::class,
繼續(xù)追蹤執(zhí)行流程,代碼會(huì)執(zhí)行到這一步
public function load($alias) { if (isset($this->aliases[$alias])) { return class_alias($this->aliases[$alias], $alias); } }
到了這里 ,看了之前的原理的人應(yīng)該都明白了,我們new Log類 ,根據(jù)我們的配置'Log' => Illuminate\Support\Facades\Log::class,實(shí)際上是調(diào)用的Illuminate\Support\Facades\Log這個(gè)類, 可是Illuminate\Support\Facades\Log里并沒(méi)有info方法,這是如何實(shí)現(xiàn)的了,可以百度f(wàn)acade原理,這里不細(xì)說(shuō),這里實(shí)際上調(diào)用的是是從容器里面獲取到了log對(duì)象,那么這個(gè)log對(duì)象是什么時(shí)候注冊(cè)到容器里面去的了,
protected $bootstrappers = [ 'Illuminate\Foundation\Bootstrap\DetectEnvironment', 'Illuminate\Foundation\Bootstrap\LoadConfiguration', 'Illuminate\Foundation\Bootstrap\ConfigureLogging', 'Illuminate\Foundation\Bootstrap\HandleExceptions', 'Illuminate\Foundation\Bootstrap\RegisterFacades', 'Illuminate\Foundation\Bootstrap\RegisterProviders', 'Illuminate\Foundation\Bootstrap\BootProviders', ];
關(guān)于laravel中 aliases別名的原理是什么問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
當(dāng)前名稱:laravel中aliases別名的原理是什么-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://aaarwkj.com/article8/dihpip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、做網(wǎng)站、面包屑導(dǎo)航、網(wǎng)站建設(shè)、建站公司、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容