Php 实例作为静态类属性

Php 实例作为静态类属性,php,static,Php,Static,在PHP中是否可以将类的实例声明为属性 基本上,我想要实现的是: abstract class ClassA() { static $property = new ClassB(); } 好吧,我知道我做不到,但除了总是做这样的事情,还有什么解决办法吗: if (!isset(ClassA::$property)) ClassA::$property = new ClassB(); 您可以使用类似于单例的实现: <?php class ClassA { private

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

基本上,我想要实现的是:

abstract class ClassA() 
{
  static $property = new ClassB();
}
好吧,我知道我做不到,但除了总是做这样的事情,还有什么解决办法吗:

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

您可以使用类似于单例的实现:

<?php
class ClassA {

    private static $instance;

    public static function getInstance() {

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

        return self::$instance;
    }
}
?>

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

<?php
abstract class ClassA {
    static $property;
    public static function init() {
        self::$property = new ClassB();
    }
} ClassA::init();
?>

请注意,类不必是抽象的,这样才能工作


另请参见和。

在Ctor中设置实例。是的,我知道我可以在构造函数中设置它,但在我的例子中,我需要一个静态的类。不过,感谢您的努力:)?@Paulius您还可以在ctor中设置静态属性,因此我看不出使用“但是”的原因。我不希望将其称为getInstance,而是将其称为getB()。
<?php
abstract class ClassA {
    static $property;
    public static function init() {
        self::$property = new ClassB();
    }
} ClassA::init();
?>