php - 在 Laravel Facades 中使用静态变量

标签 php laravel laravel-4 laravel-facade

我有一个 Facade(在本例中是一个单例),我使用 ServiceProvider 注册它:

服务提供商

use App;

class FacilityServiceProvider extends ServiceProvider 
{

    public function register()
    {  
        $this->app->singleton('Facility', function(){
            return new Facility();
        });

        // Shortcut so developers don't need to add an Alias in app/config/app.php
        $this->app->booting(function()
        {
            $loader = \Illuminate\Foundation\AliasLoader::getInstance();
            $loader->alias('Facility', 'CLG\Facility\Facades\FacilityFacade');
        });
    }
}

外观

use Illuminate\Support\Facades\Facade;

class FacilityFacade extends Facade {

    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor() { return 'Facility'; }
}

现在,我想在我的 Facility 类中包含静态变量:

Facility.php

class Facility
{
    public static $MODEL_NOT_FOUND = '-1';

    public function __construct() { ... }
}

但是当我使用 Facility::$MODEL_NOT_FOUND 时,我得到了 Access to undeclared static property

我做错了什么?

最佳答案

那是因为 Facade 类只将方法调用“重定向”到底层类。所以你不能直接访问属性。最简单的解决方案是使用 getter 方法。

class Facility
{
    public static $MODEL_NOT_FOUND = '-1';

    public function __construct() { ... }

    public function getModelNotFound(){
        return self::$MODEL_NOT_FOUND;
    }
}

另一种方法是编写您自己的从 Illuminate\Support\Facades\Facade 扩展的 Facade 类并利用 magic methods直接访问属性

关于php - 在 Laravel Facades 中使用静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27347953/

相关文章:

php - 插入数据时如何使用mysql验证字符串

php - Laravel:命令中的依赖注入(inject)

orm - Eloquent 关系过滤

php - 数字显示很奇怪,不是小数点后两位

php - Laravel 单个 Controller 与多个 Controller 以及数据库行与列

php - PHP 查询中的左大括号和大括号是什么意思?

php - 如何自动加载 PHP 5.3 类?

laravel - 如何创建仅用于测试的 Laravel 路由(phpunit)?

php - Laravel 动态 Controller 路由

php - 如何使用laravel中的blade模板在名称或id字段中输入变量值?