【发布时间】:2016-06-14 09:27:36
【问题描述】:
我正在重写我编写的 MVC 框架。除了我的框架的默认路由行为之外,我决定加入显式路由,但我遇到了一个问题。
这是执行路由的方法(这是App 类上的方法)...
private function executeRoute($requestType, $route, $callback)
{
if (is_array($requestType))
{
if (in_array($_SERVER['REQUEST_METHOD'], $requestType))
$matched = true;
else
$matched = false;
}
else if (($_SERVER['REQUEST_METHOD'] == $requestType) || ($requestType == "ALL"))
$matched = true;
else
$matched = false;
if ($matched)
{
$uriVariables = $this->getUriVariables($route, implode("/", $this->uri));
if (is_array($uriVariables))
call_user_func_array($callback, $uriVariables);
}
}
这就是我遇到麻烦的地方......
$app = new App;
$app->all("/", function() {
$controller = $app->setController("test");
if ($controller)
{
$app->controller->index();
}
else
echo $controller;
});
这不起作用,因为回调函数有它自己的范围,不包含我的 App 类的实例。有没有一种方法可以传递对回调函数的引用,而无需开发人员将其App 实例作为依赖项/参数显式添加到回调函数中?
我希望能够在回调中使用$app,或者将$this 重写为对App 实例的引用。
【问题讨论】:
标签: php methods scope callback this