Экземпляр как свойство статического класса
Можно ли объявить экземпляр класса как свойства в 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/....