Если вы проверите API Illuminate \ Container \ Container , вы заметите, что он реализует ArrayAccess и, следовательно, следующие методы.
- offsetExists()
- offsetGet ()
- offsetSet ()
- 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
Как видите, вы можете обращаться к объекту контейнера как к массиву, поскольку он реализует ArrayAccess
.
Также не имеет значения, является ли свойство items
общедоступным.В любом случае реализация ArrayAccess означает, что это позволит нам получить эти значения, как если бы они были в массиве.