【发布时间】:2015-10-01 14:25:31
【问题描述】:
我当时正在研究几个 PHP 框架,然后当然决定构建自己的框架。但我面临一个问题。我有一个动态处理 HTTP 请求的 Router 类,它基本上将 URL 分解为元素,将其除以斜杠并将其存储到一个数组中,然后调用一个函数来检查第一个元素是否是有效的 Controller。如果它是有效的,该函数应该需要它,但这就是我被卡住的地方,因为似乎我不能需要这样的文件:
if (file_exists(CONTROLLERS_DIR . $this->url[0] . '.php')) { require \App\Controllers\$this->url[0] }
如何使用命名空间来要求这样的文件?
谢谢。
【问题讨论】:
-
if (file_exists(CONTOLLERS_DIR . $this->url[0])) { require CONTOLLERS_DIR . $this->url[0] }? -
您遇到什么错误?你检查过
$this->url[0]的值吗?对吗? -
其实我用的是自动加载器,所以我不需要检查文件是否存在。我只需要它。我只是在这里用它来简单地解释我要做什么......顺便说一下,我得到的错误是:'unexpected $this after / should be identifier'。
-
但我仍然不能这样做:new \App\Controllers\$this->url[0];
-
您不能在 require/include 语句中执行字符串连接。
$ctrl = '\\App\\Contrllers\\'.$this->url[0]; $c = new $ctrl;哦,你也得逃避你的斜线。请参阅此处了解我是如何做到这一点的:github.com/r3wt/RedBeanFVM/blob/master/RedBeanFVM/…
标签: php model-view-controller namespaces require