gpt4 book ai didi

php - 如何在不修改太多代码的情况下专门化一个命名空间的类并使用它?

转载 作者:行者123 更新时间:2023-12-04 17:03:09 25 4
gpt4 key购买 nike

我有一个基于命名空间的代码,带有一个“模型”文件夹。我在代码中的任何地方都静态地调用我的模型:

\Myapp\Model\PersonModel::doSomething()

现在,我想在多个国家/地区分发我的应用程序,并且能够为某些国家/地区覆盖 PersonModel 的某些功能(并为某些国家/地区添加模型,等等)。

我会有:
\MyApp\Model\France\PersonModel::doSomething()

考虑到这一点,我希望能够使用专用版本:
  • 不修改太多代码
  • 保持我的 IDE 代码完成

  • 一种解决方案是为每个国家/地区专门设计每个 Controller ,并在任何地方使用完全限定的名称,但我不确定这是否现实(耗时,甚至可能不起作用)。

    另一种解决方案是覆盖每个模型,并在某处添加一个函数,该函数将为我提供完全限定类的名称(对于当前国家/地区),但是代码会变得丑陋,并且我会丢失代码完成。

    第三种解决方案是为每个国家/地区建立一个存储库,并尝试修改所有内容,以便核心代码位于 Git 子模块中,而其他所有内容都是专门的类......这对我来说似乎是最好的解决方案,但似乎Titan 工作,我希望所有国家/地区都在同一个存储库中以控制事情。

    我真的没有别的想法。我敢肯定我不是唯一遇到这个问题的人,但我搜索并没有发现任何问题。请告诉我,命名空间有一个我不知道的神奇功能,或者什么? :)

    编辑:这部分解决了

    我现在正在使用自定义自动加载器,它将加载正确的国家特定类。但是所有特定国家/地区的类都将共享 命名空间(这将起作用,因为我们在给定时间只使用 1 个国家/地区)。但是,我丢失了代码完成功能,但这是一个我可以接受的权衡。如果有人有解决方案可以 还有允许保持代码完成,请随时回答!

    最佳答案

    好的,我找到了一个全局满意的解决方案:

    所有特定国家/地区的类(class)将共享 命名空间(例如“Myapp\Model\Custom*”),不会引起冲突,因为一次只有 1 个国家。

    自定义自动加载器将根据当前国家/地区加载正确的类/文件。

    该解决方案的不便之处在于:

  • 不可能同时“使用”多个国家(这不是目标,所以没关系)
  • 丢失代码完成 :(

  • 优点是:
  • 与为每个国家/地区创建 repo 相比,耗时和费力得多
  • 全局干净的代码和代码结构

  • 请随时发布更优雅的解决方案,我会很高兴阅读(并接受)!

    关于php - 如何在不修改太多代码的情况下专门化一个命名空间的类并使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27887170/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com