我有一个名为Awesome
的课程,并使用ServiceProvider
和Facade
将其注册到应用。现在我可以将其用作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
有人可以帮忙吗?
答案 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。