Можно ли объявить экземпляр класса как свойство в 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; } } ?>
то вы можете ссылаться на экземпляр с помощью:
ClassA::getInstance()->someClassBMethod();
Альтернативное решение, статический конструктор, является чем-то вроде
<?php abstract class ClassA { static $property; public static function init() { self::$property = new ClassB(); } } ClassA::init(); ?>
Обратите внимание, что класс не должен быть абстрактным, чтобы это работало.
См. Также Как инициализировать статические переменные и https://stackoverflow.com/a/3313137/118153 .