您好,欢迎访问一九零五行业门户网

laravel里应用对象$app,写成$app[$k] 竟然不报错!为何?

在laravel 5.1里的
illuminatefilesystemfilesystemmanager 类中的
getconfig方法中
竟然用
$this->app['config'][filesystems.disks.{$name}]);

返回数组。
但是
$this->app

明明是个对象啊。
对象能用数组的键值取值吗? 这在语法上明明是错的但是神奇的事情还是发生了
这是getconfig方法
/** * get the filesystem connection configuration. * * @param string $name * @return array */ protected function getconfig($name) { return $this->app['config'][filesystems.disks.{$name}]; }

我单独dd($this->app);
即如下
/** * get the filesystem connection configuration. * * @param string $name * @return array */ protected function getconfig($name) { dd($this->app); return $this->app['config'][filesystems.disks.{$name}]; }

输出
但是我dd($this->app'config');即
protected function getconfig($name) { dd($this->app['config'][filesystems.disks.{$name}]); return $this->app['config'][filesystems.disks.{$name}]; }

那么输出如下
总之 $app 明明是个对象,怎么能写成 $app[$k] 这样的形式呢?
回复内容: 在laravel 5.1里的
illuminatefilesystemfilesystemmanager 类中的
getconfig方法中
竟然用
$this->app['config'][filesystems.disks.{$name}]);

返回数组。
但是
$this->app

明明是个对象啊。
对象能用数组的键值取值吗? 这在语法上明明是错的但是神奇的事情还是发生了
这是getconfig方法
/** * get the filesystem connection configuration. * * @param string $name * @return array */ protected function getconfig($name) { return $this->app['config'][filesystems.disks.{$name}]; }

我单独dd($this->app);
即如下
/** * get the filesystem connection configuration. * * @param string $name * @return array */ protected function getconfig($name) { dd($this->app); return $this->app['config'][filesystems.disks.{$name}]; }

输出
但是我dd($this->app'config');即
protected function getconfig($name) { dd($this->app['config'][filesystems.disks.{$name}]); return $this->app['config'][filesystems.disks.{$name}]; }

那么输出如下
总之 $app 明明是个对象,怎么能写成 $app[$k] 这样的形式呢?
app继承自 illuminatecontainercontainer, 而 container 实现了arrayaccess(http://php.net/manual/zh/clas...)接口。arrayaccess接口提供了像访问数组一样访问对象的能力,只要实现接口的几个方法就可以调用 isset, unset, []方式存取值。
$this->app['config'] 也是个对象 illuminateconfigrepository 它也实现了 arrayaccess ,所以也能当数组用。
arrayaccess
其它类似信息

推荐信息