亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

laravel中 aliases別名的原理是什么

發布時間:2021-06-07 17:28:59 來源:億速云 閱讀:158 作者:Leah 欄目:開發技術

laravel中 aliases別名的原理是什么?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

建立如下文件upload.php,內容為

<?php
namespace test\test2;
class upload{
 public function test(){
 return 123;
 }
}

2 建立文件index.php,內容為

<?php
namespace b;
require('upload.php');
class_alias ( '\test\test2\upload' , 'upload');
$a=new \upload();
echo $a->test();

瀏覽器執行index.php,成功輸出結果123;

可以看到class upload在命名空間test\test2下 但是new upload的時候 并沒有new \test\test2\upload 而是直接new \upload,原因不多說,就是因為函數class_alias導致的.具體的這個函數的用法可以參考手冊。這里要補充說明class_alias的第3個參數默認為true,手冊上的意思是Whether to autoload if the original class is not found.是什么意思了,還是通過例子說明 ,把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'),但是代碼還是成功執行了。有了上面的例子說明,就能看懂laravel的別名實現機制了.

在laravel中,比方說我需要使用Log類,我們通過use Log; Log::info();就能使用記錄日志了.下面來分析原理

laravel的加載過程這里不分析,中間有一步會執行如下這個'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的配置文件,這個配置文件里面我們定義了別名列表.

意思就是說如果是需要使用別名 ,必須在配置文件中注冊別名

例如配置文件中有一行配置為'Log' => Illuminate\Support\Facades\Log::class,

繼續追蹤執行流程,代碼會執行到這一步

public function load($alias) 
{ 
  if (isset($this->aliases[$alias])) { 
    return class_alias($this->aliases[$alias], $alias); 
  } 
}

到了這里 ,看了之前的原理的人應該都明白了,我們new Log類 ,根據我們的配置'Log' => Illuminate\Support\Facades\Log::class,實際上是調用的Illuminate\Support\Facades\Log這個類, 可是Illuminate\Support\Facades\Log里并沒有info方法,這是如何實現的了,可以百度facade原理,這里不細說,這里實際上調用的是是從容器里面獲取到了log對象,那么這個log對象是什么時候注冊到容器里面去的了,

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', 
];

關于laravel中 aliases別名的原理是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大田县| 封开县| 四子王旗| 平安县| 永昌县| 合川市| 嘉善县| 府谷县| 乡宁县| 上蔡县| 朝阳区| 凌海市| 华安县| 宜昌市| 保靖县| 丘北县| 平利县| 岑巩县| 纳雍县| 夹江县| 甘洛县| 海门市| 四子王旗| 建瓯市| 大同县| 兰坪| 汉源县| 金门县| 珲春市| 襄汾县| 乐至县| 侯马市| 株洲县| 三河市| 台山市| 鸡泽县| 德安县| 普安县| 永吉县| 德保县| 雷波县|