php - $this ['key' ]->method() - 这是什么?

标签 php laravel-4

我正在练习一点 PHP OO,我并没有积极使用它,所以我正在创建自己的 API 来创建网站。我是 Laravel 的忠实粉丝,我一直在使用它作为开发它的引用,并在此过程中学习更多的 PHP 和 OO,但是现在我碰壁了。

我正在尝试在我的“API”中构建一个异常处理程序来处理 404 错误等。我调查了 Laravel,这就是你的做法:

App::missing(function($exception)
{
    return Response::view('errors.missing', array(), 404);
});

所以,它使用了回调,我去看看 Laravel 用它做了什么,事情是这样的:我不明白它是如何工作的。

代码可以在这里找到:https://github.com/laravel/framework/blob/master/src/Illuminate/Foundation/Application.php

我只是把我正在调查的内容:

/**
 * Register a 404 error handler.
 *
 * @param  \Closure  $callback
 * @return void
 */
public function missing(Closure $callback)
{
    $this->error(function(NotFoundHttpException $e) use ($callback)
    {
        return call_user_func($callback, $e);
    });
}

到目前为止我能理解,但是还有 $this->error(....); 所以让我们看看:

/**
 * Register an application error handler.
 *
 * @param  \Closure  $callback
 * @return void
 */
public function error(Closure $callback)
{
    $this['exception']->error($callback);
}    

这个我无法理解。 $this 是一个对象,引用自身,但它是由索引引用的,就像在数组中一样?而且,它正在调用一个方法。

不好意思,第一次见。如何使 $this 作为数组工作?更进一步,用它调用一个方法?我一直在谷歌上搜索它,但找不到它的名称,也找不到它是什么。

我相信,在这个类中,有一些与 $this['exception']->error($callback); 相关的东西:

/**
 * Register the core class aliases in the container.
 *
 * @return void
 */
public function registerCoreContainerAliases()
{
    $aliases = array(
        '...' => '...', // other stuff
        'exception'      => 'Illuminate\Contracts\Exception\Handler',
        '...' => '...', // other stuff  
    );

    foreach ($aliases as $key => $aliases)
    {
        foreach ((array) $aliases as $alias)
        {
            $this->alias($key, $alias);
        }
    }
}

但是,如果我查看“Illuminate\Contracts\Exception\Handler”,它只是一个接口(interface)。据我所知,你实现一个接口(interface)然后使用实现,你不直接调用接口(interface)。所以这也有点令人困惑。

处理程序类的链接:https://github.com/laravel/framework/blob/master/src/Illuminate/Contracts/Exception/Handler.php

最佳答案

正如您在 source code 中看到的那样, Application 扩展 Container依次实现 ArrayAccess :

Interface to provide accessing objects as arrays.

可以像访问数组一样访问实现此接口(interface)的类的实例,这就是 $this['exception'] 中发生的情况。

关于php - $this ['key' ]->method() - 这是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25939109/

相关文章:

php - Laravel DB::RAW() NOT IN 不工作

php - 如何减少在 laravel 4 中使用 basset 的工作?

php - 拉拉维尔 4 : DB:select returns rows ordered randomly

php - 在 laravel 中加载 subview 时加载 js

javascript - 尝试从每个显示的表中回显一列

php - 正则表达式不起作用

java - 如何创建类似blade.php的jsp模板?

php - $GLOBALS ["argv"] 和 $argv 为空,$_SERVER ["argv"] 就好了

php - 将 javascript 添加到 OpenCart 中的所有页面

laravel - 如何在 2 个 Eloquent 模型之间共享功能