Php从$\u GET[]元素创建名称空间路径并使用它
我想从url中获得如下内容:example.com/?module=index&controller=index&action=hello 要通过$\u get[]获取值,然后创建名称空间路径,如application\modules\index\controllers\IndexController,然后Php从$\u GET[]元素创建名称空间路径并使用它,php,namespaces,get,Php,Namespaces,Get,我想从url中获得如下内容:example.com/?module=index&controller=index&action=hello 要通过$\u get[]获取值,然后创建名称空间路径,如application\modules\index\controllers\IndexController,然后 use application\modules\index\controllers\IndexController as IndexController; $IndexController
use application\modules\index\controllers\IndexController as IndexController;
$IndexController = new IndexController;
$IndexController->hello();
例如,当我尝试以随机方式创建路径->错误和。。我不知道怎么做请帮忙 更多的代码可能有用,但这有帮助吗
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']));
正如我在注释中提到的:在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}();
你能展示一下你试过的吗?对于这方面的一些例子,您可能会考虑查看SyfYNY2或ZAND框架路由组件,试图用$$GET(“模块”)替换模块和控制器的名称,出现控制器和语法错误,然后尝试将所有路径放入字符串中,然后键入$NameSpPACEPATH…同样的狗屎..演示如何尝试创建此命名空间路径。另外,您不能在
use
语句中使用变量,在创建新实例时,必须在变量中使用完全命名空间的类名;只是为了从变量中的完全名称空间类名创建实例?没有使用?