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

WBOY
Lepaskan: 2023-03-02 12:44:01
asal
1251 orang telah melayarinya

laravel 5.1里的
IlluminateFilesystemFilesystemManager 类中的
getConfig方法中
竟然用

<code class="php">$this->app['config']["filesystems.disks.{$name}"]);</code>
Salin selepas log masuk
Salin selepas log masuk

返回数组。

但是

<code class="php">$this->app</code>
Salin selepas log masuk
Salin selepas log masuk

明明是个对象啊。
对象能用数组的键值取值吗? 这在语法上明明是错的但是神奇的事情还是发生了

这是getConfig方法

<code class="php"> /**
     * Get the filesystem connection configuration.
     *
     * @param  string  $name
     * @return array
     */
    protected function getConfig($name)
    {
       
        return $this->app['config']["filesystems.disks.{$name}"];
    }</code>
Salin selepas log masuk
Salin selepas log masuk

我单独dd($this->app);
即如下

<code class="php"> /**
     * Get the filesystem connection configuration.
     *
     * @param  string  $name
     * @return array
     */
    protected function getConfig($name)
    {
        dd($this->app);
        return $this->app['config']["filesystems.disks.{$name}"];
    }</code>
Salin selepas log masuk
Salin selepas log masuk

输出

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

但是我dd($this->app'config');即

<code class="php"> protected function getConfig($name)
    {
        dd($this->app['config']["filesystems.disks.{$name}"]);
        return $this->app['config']["filesystems.disks.{$name}"];
    }</code>
Salin selepas log masuk
Salin selepas log masuk

那么输出如下

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

总之 $app 明明是个对象,怎么能写成 $app[$k] 这样的形式呢?

回复内容:

laravel 5.1里的
IlluminateFilesystemFilesystemManager 类中的
getConfig方法中
竟然用

<code class="php">$this->app['config']["filesystems.disks.{$name}"]);</code>
Salin selepas log masuk
Salin selepas log masuk

返回数组。

但是

<code class="php">$this->app</code>
Salin selepas log masuk
Salin selepas log masuk

明明是个对象啊。
对象能用数组的键值取值吗? 这在语法上明明是错的但是神奇的事情还是发生了

这是getConfig方法

<code class="php"> /**
     * Get the filesystem connection configuration.
     *
     * @param  string  $name
     * @return array
     */
    protected function getConfig($name)
    {
       
        return $this->app['config']["filesystems.disks.{$name}"];
    }</code>
Salin selepas log masuk
Salin selepas log masuk

我单独dd($this->app);
即如下

<code class="php"> /**
     * Get the filesystem connection configuration.
     *
     * @param  string  $name
     * @return array
     */
    protected function getConfig($name)
    {
        dd($this->app);
        return $this->app['config']["filesystems.disks.{$name}"];
    }</code>
Salin selepas log masuk
Salin selepas log masuk

输出

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

但是我dd($this->app'config');即

<code class="php"> protected function getConfig($name)
    {
        dd($this->app['config']["filesystems.disks.{$name}"]);
        return $this->app['config']["filesystems.disks.{$name}"];
    }</code>
Salin selepas log masuk
Salin selepas log masuk

那么输出如下

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

总之 $app 明明是个对象,怎么能写成 $app[$k] 这样的形式呢?

app继承自 IlluminateContainerContainer, 而 Container 实现了ArrayAccess(http://php.net/manual/zh/clas...)接口。ArrayAccess接口提供了像访问数组一样访问对象的能力,只要实现接口的几个方法就可以调用 isset, unset, []方式存取值。

$this->app['config'] 也是个对象 IlluminateConfigRepository 它也实现了 ArrayAccess ,所以也能当数组用。

ArrayAccess

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan