0

次のようなURLから取得したい:example.com/?module=index&controller=index&action=hello $ _GET []で値を取得し、application \ modules \ index \ controllers\IndexControllerのような名前空間パスを作成してから

use application\modules\index\controllers\IndexController as IndexController;
$IndexController = new IndexController;
$IndexController->hello();

たとえば、ランダムな方法でパスを作成しようとすると->エラーと..それを行う方法がわかりません。助けてください!

4

2 に答える 2

1

コメントで述べたように、useステートメントで変数を使用することはできません。新しいインスタンスを作成するときは、変数で完全に名前空間化されたクラス名を使用する必要があります。

したがって、次のようになります。

$module = $_GET['module'];
$ctrl = $_GET['controller'];
//Remember to use double backslashes in strings
$class = "application\\modules\\{$module}\\controllers\\{$ctrl}Controller";

$controller = new $class;
$controller->{$action}();
于 2012-12-09T15:30:09.410 に答える
0

より多くのコードが役立つでしょうが、これは役に立ちますか?

namespace Foobar;

class Foo {
    static public function test() {
        echo "Hello";
    }
}

call_user_func(__NAMESPACE__ .'\Foo::'.$_GET['action']); 
// or
call_user_func(array(__NAMESPACE__ .'\Foo', $_GET['action'])); 
于 2012-12-09T15:22:59.267 に答える