我有一个类(class)叫 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
有人可以帮忙吗?
最佳答案
简短的版本是——你真的不想那样做。 Laravel 外观并不意味着像普通类一样使用,如果您的应用程序以这种方式使用它们,您可能会混淆 future 的开发人员。
警告不要挡路。当你在 Laravel 中创建一个“facade”时,你实际上是在创建一个 class alias .当您添加 Awesome
到 alias
在 app/config/app.php
中列出,在某些时候运行如下代码
class_alias('Helper\Aesome\Facades\AwesomeFacade','Awesome');
这意味着每当您使用全局非命名空间类
Awesome
, PHP 替代品 Helper\Aesome\Facades\AwesomeFacade
.如果要添加常量,则需要将它们添加到此类中。Laravel 能够通过方法是因为基础
Facade
类实现了 __callStatic将您的调用传递给实际服务实现对象的方法。 Facades 不传递静态常量访问。此外,PHP 没有(似乎?)有类似的魔法方法来传递常量请求。如果您对此答案的深入版本感到好奇,我目前正在写 a series on Laravel's object system ,包括一些深入的信息 about the facade implementation .
关于Facades 类中的 Laravel 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26662133/