0
私が書いたMVCフレームワークを書き直し中です。フレームワークのデフォルトのルーティング動作に加えて明示的なルーティングを組み込むことに決めましたが、問題があります。クラスインスタンススコープをコールバック関数に渡すにはどうすればいいですか?
これは、このISN ...私は悩みを抱えているところです...(それはApp
クラスのメソッドです)
$app = new App;
$app->all("/", function() {
$controller = $app->setController("test");
if ($controller)
{
$app->controller->index();
}
else
echo $controller;
});
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
クラスのインスタンスが含まれていないため、作業していません。開発者が明示的に彼のApp
インスタンスを依存関係/引数としてコールバック関数に追加することなく、コールバック関数への参照を渡す方法はありますか?
$app
をコールバックの内側に使用したい場合は、$this
をApp
インスタンスへの参照に書き換えてください。
これを関数に渡すことなく暗黙的に行う方法はありますか?ところで、答えをありがとう。 – Allenph
私が知る限り、これはPHPの親スコープにアクセスする唯一の方法です。 –