如何在包含的文件中包含命名空间?

时间:2016-09-05 20:37:07

标签: php routing slim

我目前正在构建一个学习Slim框架的项目。我对Slim有一个很好的基本理解,但命名空间对我来说仍然很混乱。我根据它们所涉及的页面(home,about,add等)将我的路由存储在单独的文件中。问题是我无法在不使用

的情况下创建RequestResponse对象
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

位于每个路径文件的顶部。有没有办法可以将use置于主路径文件的顶部并让每个包含的文件都使用它?

例如,我的routes.php文件包含在start.php文件中,该文件包含在我的index.php中。我的路线文件中包含每个特定路线home.php, about.php, add.php, etc。我的routes.php中包含的每个文件都必须包含use语句,否则我无法访问ResponseRequest而无需命名空间。

1 个答案:

答案 0 :(得分:2)

不,你不能这样做。粗鲁的解释 - "使用声明属于文件" (如果我们不在文件中使用multiplie名称空间声明,则不建议这样做)。您也无法使用require / include扩展命名空间。

test.php: 
    include "MyString.php"; 
    print ","; 
    print strlen("Hello world!"); 
MyString.php: 
    namespace MyFramework\String; 
    function strlen($str) { 
        return \strlen($str)*2;
    } 
    print strlen("Hello world!");
  

输出:24,12

但是您可以在命名空间中实例化一次对象。它们将在命名空间的其他文件中可用。

test.php:
    namespace App;
    include "request.php";
    var_dump($request); //$request object is available here
request.php
    namespace App;
    use \Http\Request as Request;
    $request = new Request();

此外,Slim框架中应该有依赖容器。也许你可以把你的物品放在这里。不熟悉框架,所以随时纠正我。