我想了解人们对使用静态类而不是 namespace 的意见。我来自C++背景,并且非常喜欢它的语法以及它如何使您构造代码。最近,我决定需要将代码分为逻辑单元,而不只是文件。例如,我更喜欢像User::login这样的调用而不是user_login。因此,我做了一些谷歌搜索,发现PHP具有 namespace 后,我松了一口气。我的救济并没有持续很长时间,我真的不喜欢这种语法。它给我的函数调用增加了更多困惑。因此,目前我正在使用静态类来模拟 namespace 。这有什么缺点吗?

我在PHP Namespaces vs Classes with static functions上发现了类似的问题,但没有太多讨论。

另外,有没有一种方法可以避免以下情况:

class Test {
 public static void myFunc() {
  Test::myOtherFunc();
 }
 public static void myOtherFunc() {

 }
}

我认为可以在不指定名称的情况下在同一类中调用函数,但是显然不能。是否有任何解决方法(例如,在C++中使用using关键字)。

最佳答案

巧合的是,我实际上正朝着完全相反的方向前进:

  • 使用 namespace 来组织域类(或函数)
  • 使用依赖注入(inject),否则我会使用静态类

  • 使用静态类来模拟 namespace 的事情是,您不能在多个文件中组织它们,所有内容都必须在一个文件中定义。这可能完全取决于个人喜好。

    关于静态类的另一件事是,您开始时没有任何状态,然后慢慢进入一些状态管理,最后得到一些奇怪的锁定依赖性。应该为实例保留状态。当前,我唯一值得注意的静态类是站点范围的配置。

    最后,静态类中的自引用是显式的,而在命名空间中,其引用的工作方式与C++完全相同:您指定函数名称,然后首先在命名空间中对其进行查找。

    关于PHP静态类或命名空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11945497/

    10-10 19:27