0
필자가 작성한 MVC 프레임 워크를 다시 작성하는 중입니다. 프레임 워크의 기본 라우팅 동작 외에도 명시 적 라우팅을 통합하기로 결정했지만 문제가 있습니다. 클래스 인스턴스 범위를 콜백 함수에 전달하는 방법은 무엇입니까?
이
이 경로를 실행하는 방법입니다 ... 제가하는 데 문제가 어디에 다음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;
});
이 ISN (그것은 App
클래스의 방법이다) 콜백 함수가 내 App
클래스의 인스턴스를 포함하지 않는 자체 범위를 가지고 있기 때문에 작동하지 않습니다. 개발자가 명시 적으로 자신의 App
인스턴스를 종속성/인수로 콜백 함수에 추가하지 않고 콜백 함수에 대한 참조를 전달할 수 있습니까?
$app
을 콜백 내부에서 사용하거나 $this
을 App
인스턴스에 대한 참조로 다시 쓸 수 있기를 바랍니다.
함수에 전달하지 않고 암시 적으로 그렇게 할 수있는 방법이 있습니까? 그건 고마워. – Allenph
필자가 아는 한, PHP에서 상위 범위에 액세스하는 유일한 방법입니다. –