PHP中的静态类

时间:2009-11-10 13:02:17

标签: php

不是将每个函数声明为类中的“静态”,有没有办法让类本身“静态”?

5 个答案:

答案 0 :(得分:7)

不在PHP中 - 您必须将每个成员标记为您希望为静态的static。有关信息,请参阅the PHP manual

答案 1 :(得分:5)

没有什么能比得上(例如)Java静态类方式。如果您只想在一种库中收集函数,可以将__construct()和__clone()方法设置为private。这将阻止实例的创建。

答案 2 :(得分:3)

我想说最好的方法是通过私有构造函数阻止对象实例化,并明确地将所有方法标记为静态。虽然您必须小心将所有方法标记为静态(这是PHP中不存在的静态类的结果),但此方法优于Singleton方法的好处是静态方法比非静态方法更有效。您可能还希望将您的类标记为final,因为大多数静态类都不是为了扩展而设计的(这样做是好的做法)。

一个例子是这样的:

final class PseudoStatic {

  /**
   * Prevent object instantiation
   */
  private function __construct() {}

  static public function method1() {
    ...
  }

  static public function method2() {
    ...
  }

  ...
}

此外,Singleton pattern is now considered a bad practice by some

答案 3 :(得分:0)

您可以查看此page,但我认为您不能将整个类声明为静态。

答案 4 :(得分:0)

或者,如果您真正想要实现的只是一个类实例,那么将构造函数设为私有并提供静态instance()方法。例如:

class PseudoStatic {

  static private $instance;

  private function __construct() {}

  static public function instance() {
    if (!self::$instance) {
      self$instance = new self;
    }
    return self::$instance;
  }

}

$instance = new PseudoStatic(); // error!
$instance = PseudoStatic::instance(); // force one instance only