【问题标题】:Laravel Facade get VariablesLaravel Facade 获取变量
【发布时间】:2014-02-18 05:59:57
【问题描述】:

假设我们在 Laravel 中有以下类

class myClass {
    private $_someArray;

    // Functions to manipulate $_someArray
    public function someArray() {
        return $this->_someArray;
    }
}

我已经声明了一个 Facade 和一个 Alias。所以我可以通过调用myClass::someArray() 来访问$_someArray,它的属性是myClass::someArray()['key']

有没有一种方法可以在不调用函数的情况下获取数组?即我希望能够做类似myClass::someArray['key']

【问题讨论】:

  • 你不能那样做。 PHP__get 用于属性重载,但它仅适用于实例/对象。
  • @TheAlpha 并且它不适用于 Facades :(

标签: laravel laravel-4 facade


【解决方案1】:

我建议用户使用一个函数来检索具有属性的对象。

MyFacade::getSomeObject()->myProperty;

例如,函数可以从类常量或类变量中获取数据,并在需要时将它们组合起来:

public function getSomeObject()
{
    $result = new \stdClass();
    $result->id = self::SOME_ID;        
    $result->myProperty = $this->someProperty;
    return $result;
}

【讨论】:

    【解决方案2】:

    默认情况下,Facade 是通过 Facades __callStatic 方法调用提供者方法,而不是属性。

    public static function __callStatic($method, $args)
        {
            $instance = static::resolveFacadeInstance(static::getFacadeAccessor());
    
            switch (count($args))
            {
                case 0:
                    return $instance->$method();
    
                case 1:
                    return $instance->$method($args[0]);
    
                case 2:
                    return $instance->$method($args[0], $args[1]);
    
                case 3:
                    return $instance->$method($args[0], $args[1], $args[2]);
    
                case 4:
                    return $instance->$method($args[0], $args[1], $args[2], $args[3]);
    
                default:
                    return call_user_func_array(array($instance, $method), $args);
            }
        }
    

    【讨论】:

    • 你并没有真正回答这个问题:(
    【解决方案3】:

    这种方式有效:

    myClass::$_someArray
    

    【讨论】:

      猜你喜欢
      • 2020-09-07
      • 2023-04-01
      • 2013-02-11
      • 2014-04-05
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多