关于php:实例作为静态类属性

Instance as a static class property

是否可以在PHP中将类的实例声明为属性?

基本上我想要达到的是:

1
2
3
4
abstract class ClassA()
{
  static $property = new ClassB();
}

嗯,我知道我不能这样做,但是除了总是这样做之外,还有什么解决办法吗:

1
if (!isset(ClassA::$property)) ClassA::$property = new ClassB();


您可以使用类似singleton的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
class ClassA {

    private static $instance;

    public static function getInstance() {

        if (!isset(self::$instance)) {
            self::$instance = new ClassB();
        }

        return self::$instance;
    }
}
?>

然后,您可以使用以下命令引用该实例:

1
ClassA::getInstance()->someClassBMethod();


另一种解决方案,静态构造函数,是

1
2
3
4
5
6
7
8
<?php
abstract class ClassA {
    static $property;
    public static function init() {
        self::$property = new ClassB();
    }
} ClassA::init();
?>

请注意,类不必是抽象的,这样就可以工作了。

另请参阅如何初始化静态变量和https://stackoverflow.com/a/3313137/118153。