在Facades类中的Laravel常量

时间:2014-10-30 19:57:56

标签: laravel laravel-4 facade laravel-facade

我有一个名为Awesome的课程,并使用ServiceProviderFacade将其注册到应用。现在我可以将其用作Awesome::Things()

我想在这个类中添加常量,所以我尝试了

<?php namespace Helper\Awesome;
class Awesome()
{
    public static $MOVIE = 'I love the Lego Movie!";
}

但是当我致电Awesome::$MOVIE时,我会Access to undeclared static property: Helper\\Aesome\\Facades\\AwesomeFacade::$MOVIE

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:6)

简短版本是 - 你真的不想这样做。 Laravel外墙并不像普通课程那样使用,如果您的应用程序以这种方式使用它们,您可能会混淆未来的开发人员。

警告不碍事。当你创建一个&#34; facade&#34;在Laravel,你实际上正在创建一个class alias。当您将Awesome添加到alias中的app/config/app.php列表时,某些代码如下所示

class_alias('Helper\Aesome\Facades\AwesomeFacade','Awesome');

这意味着无论何时使用全局非命名空间类Awesome,PHP都会替换Helper\Aesome\Facades\AwesomeFacade。如果要添加常量,则需要将它们添加到此类中。

Laravel能够传递方法,因为基类Facade类实现了一个__callStatic方法,该方法将您的调用传递给实际的服务实现对象。外墙不会传递静态持续访问。另外,PHP没有(似乎?)具有类似的传递常量请求的魔术方法。

如果您对此答案的深度版本感到好奇,我现在正在撰写a series on Laravel's object system,其中包括一些深入的信息about the facade implementation