Здравствуйте. Изучаю laravel, в коде самого фреймвора встретил такую конструкцию:
$this['events']
$this понятно, ссылка на экземпляр класс, но в самом классе нет переменных, констант или методов 'events', да и данный способ обращения (через [ ]) не описан в документации (по крайней мере я не нашёл). Как нужно понимать данную конструкцию?
Спасибо.
Вячеслав, я понимаю что данный синтаксис ($this['events']) говорит о том, что идёт обращение к элементу массива по ключу. Однако речь о том что $this это зарегистрированное слово и не может быть использовано для наименования массива, в нём сохраняется ссылка на инстанс класса. Для большего понимания: в том контексте где я нахожусь нет ни каких массивов $this, есть вызов функции из некоего объекта, и внутри данной функции используется конструкция $this['events'], т.е согласно документации в $this находится ссылка на объект из которого вызвана функция. Конкретный пример. Допустим есть класс Aplication, в котором есть метод bootstrapWith, на основе данного класса создаётся объект ссылка на который сохраняется скажем в переменной $app, далее идёт вызов функции $app->bootstrapWith($arr), по умолчанию в функцию кроме свойства $arr, передаётся и ссылка на объект из которого данная функция была вызвана и доступна данная ссылка в переменной $this. Ниже приведён реальный код. С $this->hasBeenBootstrapped = true; всё понятно - обращение к проперти $hasBeenBootstrapped объекта $app, а вот как трактовать $this['events'] я не понимаю, нет таких свойств и методов в классе Aplication, да и сама такая форма обращения к ним в документации не прописана
public function bootstrapWith(array $bootstrappers)
{
$this->hasBeenBootstrapped = true;
foreach ($bootstrappers as $bootstrapper) {
$this['events']->dispatch('bootstrapping: '.$bootstrapper, [$this])s['events']''];
$this->make($bootstrapper)->bootstrap($this);
$this['events']->dispatch('bootstrapped: '.$bootstrapper, [$this]);
}
}
Евгений спасибо за ответ. Я вижу вы хорошо разбираетесь в laravel. На столе неделю лежат распечатки \Illuminate\Foundation\Application, \Illuminate\Container\Container, пытаюсь разобраться, помогите . Laravel при инициализации и приложения и в дальнейшем при его работе ведёт запись основных данных в три массива: $instance, $bindings, $aliases, $abstrctAliases структура которых [ ключ => значение ], я интуитивно понимаю что $this['events'] это обращение к ключу 'events' какого-то из этих массивов, но во первых мне не понятен сам синтаксис обращения, в документации по php я такого синтаксиса не нашёл, по моему должно быть что-то вроде $this->abstrctAliases['events']; и во вторых как php понимает в каком массиве смотреть данный ключ. _get и _set использует внутри себя такой же синтаксис, поэтому тоже мне не понятны.
Спасибо
sibir007, Вам более понятно будет если изучите внутренний класс PHP, такой как ArrayAccess.
Так как Illuminate\Container\Container implements ArrayAccess, ContainerContract.
Данный интерфейс обеспечивает доступ к объектам в виде массивов.