0

我想从这样的网址: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 回答