【问题标题】:How would I include a namespace in an included file? [duplicate]如何在包含的文件中包含命名空间? [复制]
【发布时间】:2017-01-13 05:25:17
【问题描述】:

我目前正在构建一个项目来学习 Slim 框架。我对 Slim 有很好的基本了解,但命名空间对我来说仍然很困惑。我根据路由相关的页面(主页、关于、添加等)将我的路由存储在单独的文件中。问题是我无法在不使用

的情况下创建 Request 或 Response 对象
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 语句,否则我无法在没有命名空间的情况下访问Response 和Request。

【问题讨论】:

标签: php routing slim


【解决方案1】:

不,你不能这样做。粗鲁的解释 - “使用语句属于文件”(如果我们没有在文件中使用多重命名空间声明,不建议这样做)。也不能使用 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 框架中应该有依赖容器。也许你可以把你的对象放在这里。对框架不熟悉,欢迎指正。

【讨论】:

    猜你喜欢
    • 2011-07-24
    • 1970-01-01
    • 2014-04-26
    • 2014-08-26
    • 2020-04-26
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    相关资源
    最近更新 更多