【问题标题】:Elegant and pratical solution for retrieving full Namespaces用于检索所有命名空间的优雅实用的解决方案
【发布时间】:2014-09-28 17:20:53
【问题描述】:

这是我现在的项目的祸根,也是我过去的项目。对于它们中的每一个,我都使用了远非最佳的选项。

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

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

要获得完整的命名空间,我有几个选项,都很麻烦:

  1. 键入 SomeModel,PHP 将找到命名空间。但是,它的自动完成功能不会打印全命名空间,而是打印 SomeModel() 并在文件顶部添加 USE 全命名空间。如果 IDE 只打印我输入的全命名空间,这个问题就会得到解决。取而代之的是,我必须在自动完成窗口上右键单击两次,复制粘贴完整的 namspace,然后自己粘贴并为其添加起始 /,非常麻烦。

  2. 对命名空间使用defined() 常量。工作量加倍,性能减半,并且可能会导致本地 CONSTS 出现错误

  3. 创建一个具有检索所有命名空间的函数的类对象。同样,使用起来很麻烦且不实用

    如何让我的命名空间引用易于访问,并且在大型项目中易于更新?大型项目通常如何处理这些?

【问题讨论】:

  • 我真的希望有人能帮我解决这个问题,因为我搜索了很多关于如何以有组织的方式处理包含、使用和需求的内容,但我什至找不到关于这个主题的讨论
  • 这太令人沮丧了,为什么没有人谈论这个?每个人的项目中都有大量的包含(路径)或命名空间,但我从来没有看到有关如何组织、检索和使它们易于更新的解决方案。这方面的最佳做法是什么?

标签: php namespaces


【解决方案1】:

我不明白你在要求什么,或者你真正需要什么。

我可以建议你看看 Symfony 自动加载器。您可以将其作为一个组件使用,而不必使用整个框架。

然后,您可以调用类并添加命名空间,就像它们是 Java 中的包一样。

这回答了你的问题?

【讨论】:

  • 感谢您的回复,但事实并非如此。我已经有一个自动加载器类。让我试着换一种方式。在我的所有项目中,我都会多次调用我的类的命名空间。如果我必须更改一个类的命名空间,我必须在代码中找到对它的所有引用并修复,这有点容易出错并且测试起来很耗时。解决这个问题的一种方法是为命名空间定义()常量,但这会引入我原来的帖子中提到的其他问题。我正在尝试找到一个关于如何检索和存储命名空间名称的好习惯
  • 但是,例如,如果您使用 Java,并且更改了包的名称,则还必须搜索代码并进行修复(显然,IDE、Netbeans 或 Eclipse对你来说,但无论如何都必须这样做......)。
猜你喜欢
  • 1970-01-01
  • 2011-12-24
  • 2015-07-08
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2018-04-28
  • 1970-01-01
相关资源
最近更新 更多