如何在不破坏现有代码的情况下将PHP名称空间部分添加到库中?


10

多年来,我公司创建了一个模块化PHP框架,早在PHP 5.3添加名称空间之前就已经开始。最近,我们决定开始在库的新代码中使用名称空间,并且我们最终打算在旧代码中使用名称空间。但是,我们有一些问题正在尝试解决,以确定是否将名称空间添加到v5.3之前的代码库中不是一个好主意:

  1. 我可以为一个类命名空间,也可以导入(使用)全局命名空间,以便所有全局类都不需要\前缀吗?
  2. 如果我们在库中为现有类命名空间,那么如何在框架升级后防止所有现有项目中断?例如,库可以将class的名称更改ThemeEngine\module\theme\ThemeEngine,但现有网站ThemeEngine无需任何代码修改即可调用吗?如果是这样,该代码将是什么样?

Answers:


2
  1. 遗憾的是,您根本不能“使用”命名空间,只能使用类:http : //www.php.net/manual/en/language.namespaces.importing.php。编辑:您可以从全局名称空间中导入类,就像在示例之一中使用ArrayObject一样。

  2. 您可以有一个use语句的全局部分,以便在理论上也应该在全局命名空间中找到所有早已存在的类。理论上...

我们和您在同一条船上。我们有一些不使用名称空间的旧代码,但确实使用了_名称空间造假者(例如Zend_Db_Table ...),还有一些甚至不伪造名称空间的旧代码。我们可能会走相同的路线,但是我们仍然需要测试一下是否有可能。祝好运!


1

是的,我最后所做的是使用-“使用”导入我需要的单个类

例如,而不是在所有类似内容的前面添加“ /”:

\DateTime()

我在名称空间下添加了

namespace MyProject;
use DateTime;

...
DateTime();     //without \
...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.