如何在单独的命名空间中包含几乎相同的文件(用于调试目的)


How to include an almost identical file in a separate namespace (for debugging purposes)

我面临以下PHP代码问题:

目前,我的PHP代码没有使用任何名称空间。我已经对包含文件foobarinc.php进行了修改,因此我现在有两个版本foobarinc-v1.php(旧版本)和foobarinc-v2.php(新版本)。include文件具有一些功能(例如foo()),这些功能存在于两个文件中。目前foobarinc-v2.php有一些错误,所以我需要用fooinc-v1.php中的foo()调试我的代码(因为至少我知道它有效),但我也需要在其他地方从foobarinc-v2.php调用foo()。我不想更改`foobarinc-v1.php文件中的任何内容,因为我需要它,但如果需要,我愿意在文件中添加一个名称空间。我可以使用PHP名称空间来实现我的目的吗?

例如,我想做:

main.php:

include("includes/foobarinc-v2.php");
function main() {
  hello(); // from main.php
  namespace myDebugNameSpace {
    include("includes/foobarinc-v2.php");
    $a = foo(); // foo() version 2
    outerNameSpace::bar($a); // bar() version 1
  }
  world(); // from main.php
  foo(); // foo() version 1
}
main();

如何修复以上代码以达到我的目的?

您需要做的是添加foobarinc-v1.php命名空间,如下所示:

namespace foobarinc1;

foobarinc-v2.php几乎相同:

namespace foobarinc2;

Main.php

include 'foobarinc-v1.php'; 
include 'foobarinc-v2.php';
use foobarinc1;
use foobarinc2;
foobarinc1->foo();
foobarinc2->foo();

您可以在此处找到更多信息:http://php.net/manual/pl/language.namespaces.php