【问题标题】:PHP namespace for multiple files多个文件的 PHP 命名空间
【发布时间】:2014-10-29 07:50:30
【问题描述】:

我正在尝试包含许多包含函数、类和调用的文件,但我想将所有内容都放在 PHP 命名空间中。 我的问题是:所有文件都是另一个 Web 应用程序核心的一部分。所以我无法编辑文件。 有没有办法为文件列表全局声明命名空间? 类似的东西:

namespace mynamespace {
    include_once("file1.inc.php");
    include_once("file2.inc.php");
    include_once("file3.inc.php");
    ...
}

当然我试过这段代码,但它不起作用;我的所有尝试都失败了,而包含文件的第一行位于 note namespace mynamespace;.

【问题讨论】:

    标签: php namespaces include


    【解决方案1】:

    是的。有点麻烦(您需要列出所有类),并且仅当您有以<?php 开头且没有命名空间的行为良好的文件时才有效。另外,因为 eval 的东西没有像样的错误报告,所以只能在经过良好测试的代码中使用它。

    <?php
    
    namespace whatever;
    
    use mynamespace\Class1FromFile1;
    use mynamespace\Class2FromFile1;
    use mynamespace\ClassFromFile2;
    use mynamespace\ClassFromFile3;
    
    function ns_inc ($lib, $ns) {
            eval("namespace $ns;" . substr(file_get_contents($lib), 5));
    }
    
    $ns= 'mynamespace';
    ns_inc('file1.inc.php', $ns);
    ns_inc('file2.inc.php', $ns);
    ns_inc('file3.inc.php', $ns);
    

    【讨论】:

      【解决方案2】:

      不,这是不可能的。每个文件都需要声明自己的命名空间;您不能使用外部代码强制某些内容位于不同的命名空间中。 (像 runkit 之类的一些 hack 可能会让你摆弄它,但我认为这超出了 PHP 作为一种语言的常规范围。)

      【讨论】:

      • 似乎是逻辑,但我认为如果你可以包含一个文件,你就可以设置它的命名空间。非常感谢您的快速答复!
      • 将命名空间视为类/函数名称的一部分。那么也许更明显的是,您不能随意重命名。
      猜你喜欢
      • 2012-03-05
      • 1970-01-01
      • 2011-08-15
      • 2011-04-01
      • 1970-01-01
      • 2011-06-09
      • 2011-07-06
      • 1970-01-01
      相关资源
      最近更新 更多