我正在练习一点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['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);
}
}
}
不过,如果我看看“照亮\合同\异常\处理程序”,它只是一个接口。据我所知,你实现一个接口然后使用实现,你不直接调用接口。所以这也有点混乱。
链接为Handler类:https://github.com/laravel/framework/blob/master/src/Illuminate/Contracts/Exception/Handler.php