Laravel-通过立面获取价值实例

时间:2018-12-26 07:38:00

标签: laravel laravel-5

Cat中抽象在方法中

SELECT (xpath('(/Type/V[text()="Cat"]/@Idx)[1]', nmuloc))[1] idx
       FROM elbat;

Illuminate\Support\Facades\Facade是Application的一个实例。还有protected static function resolveFacadeInstance($name) { if (is_object($name)) { return $name; } if (isset(static::$resolvedInstance[$name])) { return static::$resolvedInstance[$name]; } return static::$resolvedInstance[$name] = static::$app[$name]; } 喜欢static::$app的访问值,我不明白,这是什么技术?

ex:static::$app[$name]返回array的实例。似乎在static::$app['router']

中获得了Router的值

我认为它像例子吗?但是得到了protected $instances

Illuminate\Container\Container

1 个答案:

答案 0 :(得分:3)

如果您检查Illuminate\Container\Container的API,您会注意到它实现了ArrayAccess,并因此实现了以下方法。

  1. offsetExists()
  2. offsetGet()
  3. offsetSet()
  4. offsetUnset()

ArrayAccess使您可以将对象作为数组进行访问。这是一个非常简单的容器示例。

<?php

class Container implements ArrayAccess {

    private $items = array();

    public function __construct() {
        $this->items = [
            'one'   => 1,
            'two'   => 2,
            'three' => 3,
        ];
    }

    public function offsetSet($offset, $value) {
        if (is_null($offset)) {
            $this->items[] = $value;
        } else {
            $this->items[$offset] = $value;
        }
    }

    public function offsetExists($offset) {
        return isset($this->items[$offset]);
    }

    public function offsetUnset($offset) {
        unset($this->items[$offset]);
    }

    public function offsetGet($offset) {
        return isset($this->items[$offset]) ? $this->items[$offset] : null;
    }
}

$container = new Container();

echo $container['one']; // outputs 1

$container['four'] = 4; // adds 4 to $items. 

echo $container['four']; // outputs 4

如您所见,由于Container对象实现了ArrayAccess,因此可以将其作为数组访问。

items属性是否不可公开访问也无关紧要。无论如何,ArrayAccess的实现意味着它将允许我们像在数组中一样检索这些值。