Ich bin dabei, ein MVC-Framework neu zu schreiben, das ich geschrieben habe. Ich habe beschlossen, explizites Routing zusätzlich zum Standard-Routing-Verhalten meines Frameworks zu integrieren, aber ich habe ein Problem.Wie Klasseninstanzbereich an Callback-Funktion übergeben?
Dies ist die Methode, die eine Route ausgeführt (es ist ein Verfahren auf der App
Klasse) ...
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);
}
}
Hier ist, wo ich Probleme ...
mit bin$app = new App;
$app->all("/", function() {
$controller = $app->setController("test");
if ($controller)
{
$app->controller->index();
}
else
echo $controller;
});
Diese isn funktioniert nicht, da die Callback-Funktion einen eigenen Bereich hat, der nicht die Instanz meiner Klasse App
enthält. Gibt es eine Möglichkeit, einen Verweis auf die Callback-Funktion zu übergeben, ohne dass der Entwickler seine App
Instanz explizit als Abhängigkeit/Argument zur Callback-Funktion hinzufügt?
Ich möchte $app
innerhalb des Rückrufs verwenden oder $this
zu einem Verweis auf die App
Instanz neu schreiben.
Gibt es eine Möglichkeit, dies implizit zu tun, ohne dies an die Funktion zu übergeben? Danke für die Antwort übrigens. – Allenph
Soweit ich weiß, ist dies die einzige Möglichkeit, auf den übergeordneten Bereich in PHP zuzugreifen. –