Экземпляр как свойство статического класса

Можно ли объявить экземпляр класса как свойства в PHP?

В основном я хочу достичь:

abstract class ClassA() 
{
  static $property = new ClassB();
}

Ну, я знаю, что я не могу этого сделать, но есть ли какое-нибудь обходное решение, всегда делающее что-то вроде этого:

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

Ответ 1

вы можете использовать одноэлементную реализацию:

<?php
class ClassA {

    private static $instance;

    public static function getInstance() {

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

        return self::$instance;
    }
}
?>

то вы можете ссылаться на экземпляр с помощью:

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

Ответ 2

Альтернативное решение, статический конструктор, является чем-то вроде строк

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

Обратите внимание, что класс не должен быть абстрактным, чтобы это работало.

См. также Как инициализировать статические переменные и fooobar.com/info/3410/....