当前位置: 首页 > 知识库问答 >
问题:

Laravel:外观和别名之间的差异

司健柏
2023-03-14

很好的一天!

我读得越多,就越感到困惑。外观和别名之间有什么区别?

我有这个类:

/应用程序/库/项目/数据。php

namespace PJ;

class Data {

    // It is much like a data container, with static methods and properties for saving info

}

和相应的外观,所以我可以只使用PJD进行访问::。

根据周围的一些网页:

... Laravel Facades是代理。它们环绕并调用代码底层真实实现上的函数。此外,在Laravel应用程序的上下文中,通过将这些Facades分配给别名来访问它们。依赖注入容器的这种使用允许您通过简单地调用File来引用诸如Illumate\Support\Facades\Filessystem之类的东西。(http://ryantablada.com/post/proxies-service-locators-alias-facades-and-war)

但是,我还发现并成功测试了添加以下内容:

__app/config/app。php__

'aliases' => array(
    //....,
    'PJD'             => 'PJ\Data',
),

我也可以以同样的方式访问我的班级。

那么,有什么区别?

谢谢

编辑#01

我在 /app/libraries/Project/D中创建了一个名为Data的类ata.php

namespace PJ;

class Data {
    // It is much like a data container, with static methods and properties for saving info
}

我有一个Facade类用于这个类Data/app/libraries/Project/DataFacade。php

use Illuminate\Support\Facades\Facade;   
class PJD extends Facade {
    protected static function getFacadeAccessor() { 
        return 'PJData';
    } 
}

我为他们提供了一个服务提供商:/app/libraries/Project/DataServiceProvider。php

use Illuminate\Support\ServiceProvider;

class DataServiceProvider extends ServiceProvider {
    public function register() {
        $this->app->singleton('PJData', function() {
            return new PJ\Data;
        });
    }
}

我还添加了/app/config/app。php:

'providers' => array(
    // ....
    'DataServiceProvider',
),

在《作曲家》中。json我添加了一个psr-4行,将PJ名称空间定向到/app/libraries/Project

"psr-4": {
     "PJ\\": "app/libraries/Project"
},

通过这样做,我可以从项目中的任何地方访问我的类,只需通过PJD:: 而不是PJ\Data::。

然而,我也注意到仅仅通过增加 /app/config/app.php

'aliases' => array(
    //....,
    'PJD'             => 'PJ\Data',
),

我得到了完全相同的结果,没有所有的外观和服务提供商。那么,这两者的意义是什么?

谢谢,很抱歉发了这么大的帖子。

共有1个答案

景鹏云
2023-03-14

Facade和Alias是两个完全不同的概念。

您不能访问PJ\Data\通过PJD::,除非您在绑定时在服务提供程序中设置了别名

如果您正在访问它,而没有在config/app.php中定义它,那么您已经在服务提供程序文件本身中设置了它。

别名的定义,

用于表示一个被指名的人在另一个指定的名字下也是已知的或更熟悉的。

它只是意味着你给这个类起了一个不同的名字,这样它就更容易调用了。

e. g.

如果您有这样一个类:Foo\Bar\AVeryLongNamespaceClassName\Data,您只需提供一个别名(例如PJD),并通过该别名访问其方法和属性。

注:

单元测试是立面工作方式的一个重要方面。事实上,可测试性是立面存在的主要原因。

 类似资料:
  • 问题内容: 外观和中介设计模式有什么区别。我想了解在哪种情况下可以在这两种设计之间进行选择。我浏览了以下链接,发现在用例方面两者相同。 外观设计模式:http : //www.tutorialspoint.com/design_pattern/facade_pattern.htm 介体设计模式:http : //www.java2s.com/Tutorial/Java/0460__Design-

  • 假设我们正在使用 ?如果是这样的话,利弊是什么?

  • 问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。

  • 它们不是可以互换的吗?

  • 我编写了一个简单的脚本,它接受任意数量的参数来演示< code>$@和< code>$*之间的区别: 在我做的 CLI 上 这就是打印出来的 因为它们是相同的,这是否意味着等于?还是我遗漏了一点?