2014-09-28 48 views
0

这是我现在项目的祸根,也是我过去的项目。对于他们每个人,我使用的选择都远远不够理想。用于检索完整名称空间的优雅和实用解决方案

问题:我的项目有一个实例化任何类的注册表,要求您传递一个完整名称空间,并检索完整的名称空间可能会很痛苦。例如:

$registry->getClassInstance('\application\model\SomeModel'); 

要获得完整的命名空间,我有几个选项,所有繁琐:

  1. 类型SomeModel,和PHP将找到的命名空间。但是,它的自动完成将不打印全名空间,而是打印SomeModel()并在文件顶部添加USE全名空间。如果IDE只是打印我输入的完整名称空间,则此问题已重新生成。相反,我必须右键点击自动填充窗口两次才能复制和粘贴完整的namspace,然后自己粘贴并添加一个开始/到它,非常麻烦。
  2. 对名称空间使用defined()常量。将工作翻倍,性能降低一半,并可能导致本地缺陷
  3. 使用函数创建一个类对象以检索所有命名空间。再次,很多麻烦和不切实际的使用

    如何保持我的名称空间引用容易到达,并且易于在大型项目中更新?大项目通常如何处理这些问题?

+0

我真的很希望有人能帮助我,因为我搜索了一个LOT如何处理包含和使用,并需要有组织的方式,我甚至无法找到关于此主题的讨论 – Rob 2014-09-28 17:31:51

+0

这太令人沮丧了,为什么没有人有没有谈过这个?每个人都在他们的项目中包含大量的包含(路径)或命名空间,但我从来没有看到如何组织,检索和使它们易于更新的解决方案。什么是最佳做法? – Rob 2014-09-28 17:39:31

回答

0

我不明白你在问什么,或者你真的需要什么。

我可以建议你,看看Symfony自动加载器。您可以将其用作组件,而不必使用整个框架。然后,您可以调用类并添加名称空间,就好像它们是Java中的包一样。

这回答你的问题?

+0

感谢您的回复,但事实并非如此。我已经有一个自动加载器类。那么让我尝试以不同的方式。在我所有的项目中,我都会对我的课程名称空间进行多次调用。如果我不得不改变一个类的名字空间,我必须在代码和修复中找到所有对它的引用,这是一个容易出错和耗时的测试。解决这个问题的一个方法是为命名空间定义()常量,但是它引入了我原始帖子中提到的其他问题。我试图找到一个关于如何检索和存储名称空间名称的良好做法 – Rob 2014-09-28 19:13:18

+0

但是,例如,如果您正在使用Java,并且您更改了包的名称,则还必须搜索代码并修复(很明显,IDE,Netbeans或者Eclipse都是为你做的,但是它必须被完成......)。 – 2014-09-29 14:11:40

相关问题