不是将每个函数声明为类中的“静态”,有没有办法让类本身“静态”?
答案 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