亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Laravel 的命名空間之前添加 Facades,它是如何工作的?

在 Laravel 的命名空間之前添加 Facades,它是如何工作的?

PHP
墨色風雨 2022-07-22 17:15:22
好的,以前有關于同一主題的問題,但它們無助于完全理解這個主題SO SuggestionFirstSO Suggestion Second所有代碼只是為了說明情況,所以這是結構一個輔助函數,它做一些事情namespace App\Helpers;class Pets{    public function limit($string,$limit,$start = 0){        return substr($string,$start,$limit);    }}現在為了使用這個助手,因為它是一個類,所以我需要創建一個像這樣的對象代碼示例優先namespace App\Objects;use App\Helpers\Pets;class User{    public function getShortUserName(){        $name = auth()->user()->first_name.' '.auth()->user()->last_name;        $pet = new Pets;        return $pet->limit($name,10);    }}但是在某個地方我知道,如果您在命名空間之前添加外觀,即使它們是像這樣的非靜態函數,您也可以靜態調用該函數代碼示例二namespace App\Objects;use Facades\App\Helpers\Pets;class User{    public function getShortUserName(){        $name = auth()->user()->first_name.' '.auth()->user()->last_name;        return Pets::limit($name,10);    }}現在我想知道的是我有 2 個帶有命名空間的示例代碼,如下所示use App\Helpers\Pets;use Facades\App\Helpers\Pets;通過添加門面,我可以靜態調用該函數,但是如何,這不是我的應用程序中的驗證命名空間 laravel 在幕后做什么,我很困惑感謝您的時間 ;)
查看完整描述

2 回答

?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

您所描述的是 Laravel 實時外觀。

您可以在此處找到該功能的文檔: https ://laravel.com/docs/6.x/facades#real-time-facades


查看完整回答
反對 回復 2022-07-22
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

我不會詳細介紹,但這是對在 laravel 中使用外觀時幕后發生的事情的簡單解釋。


假設您使用一些公共方法定義了一個自定義類:


namespace Test;


class Foo

{

    public function test()

    {

        return 'test';

    }

}

然后你必須為這個類定義一個外觀:


namespace Test1;


class BarFacade

{

    // In laravel this is called in the Facade abstract class but it is actually implemented

    // by all the facades you add across the application

    public static function getFacadeAccessor()

    {

        // In laravel you can also return a string which means that the object 

        // will be retrieved from the container.


        return new \Test\Foo();

    }


    // In laravel this method is defined in the Facade abstract class

    public static function __callStatic($method, $args)

    {

        $object = self::getFacadeAccessor();


        return call_user_func_array([$object, $method], $args);

    }

}

$aliases然后,您必須在文件的數組中定義別名config.app。這些別名由 laravel 解析并使用 php 內置函數class_alias 注冊(參見 Illuminate/Foundation/AliasLoader.php)


class_alias('Test\Foo', 'BarFacade', true);

// You can also create an alias for the facade itself

class_alias('Test1\BarFacade', 'FooBar', true);

然后你可以簡單地調用門面:\


var_dump(BarFacade::test());

var_dump(\Test1\BarFacade::test());

var_dump(\FooBar::test());

結果顯然是:


string(4) "test"

string(4) "test"

string(4) "test"


查看完整回答
反對 回復 2022-07-22
  • 2 回答
  • 0 關注
  • 117 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號