【问题标题】:PHP: Is Static better than Non-Static? [closed]PHP:静态比非静态更好吗? [关闭]
【发布时间】:2011-09-27 13:32:58
【问题描述】:

当我尝试运行我的网站时,我对静态和非静态函数以及类属性感到非常困惑。

有人可以解释一下使用静态函数而不是使用非静态方法编写整个网站是否更好? 我在谷歌上找不到很多。

【问题讨论】:

  • 我认为您不应该只使用其中一种。仅在有意义时才使用静态,对于实例也是如此
  • 您在 Google 上找不到太多信息,因为它很大程度上取决于您的应用程序架构和(软件)设计的外观。
  • 您不能只互换静态和非静态函数。您的所有类都不需要对象实例来存储状态吗?
  • 两者都不是更好,它们只是不同。

标签: php html


【解决方案1】:

有一种观点认为静态是有害的,应该避免,因为它们在类之间产生了过于僵化的绑定。例如。如果你有类 A 和 B 调用彼此的方法,然后从它们子类 AA 和 BB,并期望 AA 调用 BB 的代码,如果它们只知道彼此作为实例,那将很好地工作,但它会失败对于仍然指向 A/B 的静态调用。

无论如何,PHP 的静态实现是相当糟糕的。在 5.3 之前没有后期静态绑定(意味着对象不能调用自己的静态方法,使得静态函数在 OOP 架构中非常无用),静态函数不能在严格模式下非静态调用,调用函数的方式错误会导致非常奇怪的错误,类与他们的父母共享他们的静态变量......当不确定时,你应该使用非静态恕我直言。

【讨论】:

    【解决方案2】:

    如果您的方法需要访问“this->”中的数据,那么您必须将其设为非静态方法。然后需要实例化对象(通过“new”)。

    如果您的方法使用的只是函数参数中包含的数据,那么请考虑将您的方法设为静态。或者只使用静态方法创建一个单独的类。

    【讨论】:

    • 此答案仅在语义级别突出显示差异。它没有解决使用静态的缺点,例如在测试驱动开发中。
    【解决方案3】:

    这实际上取决于您的应用程序是如何设计的。如果可以并且将调用该函数并且无需实例化该类,则将其声明为静态。否则,不要。在几乎所有情况下,您都会使用两者的组合,因为仅使用静态函数没有意义(您不妨编写过程代码)。

    【讨论】:

      【解决方案4】:

      编写 OO 代码并仅使用静态变量和方法是没有意义的。这与编写程序代码相同。您无法从 OOP 仅使用静态代码提供的所有功能中受益。

      我并不是说你不能使用静态方法或属性,但大量使用它们表明糟糕的 OO 设计。

      【讨论】:

      • 而且只使用非静态方法和属性是好的,对吧?
      • 我会说两者结合是最好的。例如一些设计模式强烈依赖于静态功能,例如 Singleton。您必须仅在必要时使用静态代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多