У меня есть абстрактный класс, который унаследован рядом других классов. Я хотел бы иметь его так, чтобы вместо повторного создания экземпляра (__construct ()) одного и того же класса каждый раз, чтобы он только инициализировался один раз и использовал свойства ранее унаследованных классов.
Я использую это в моей конструкции:
function __construct() { self::$_instance =& $this; if (!empty(self::$_instance)) { foreach (self::$_instance as $key => $class) { $this->$key = $class; } } }
Это работает – вроде, я могу получить свойства и повторно назначить их, но в этом я также хочу назвать некоторые другие классы, но только один раз.
Любые предложения для лучшего способа сделать это?
Это синглтонская конструкция:
class MyClass { private static $instance = null; private final function __construct() { // } private final function __clone() { } public final function __sleep() { throw new Exception('Serializing of Singletons is not allowed'); } public static function getInstance() { if (self::$instance === null) self::$instance = new self(); return self::$instance; } }
Я сделал конструктор и __clone()
private
final
чтобы помешать людям клонировать и напрямую инициировать его. Вы можете получить экземпляр Singleton с помощью MyClass::getInstance()
Если вы хотите, чтобы абстрактный класс base-singleton рассмотрел это: https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/system/SingletonFactory.class.php
Вы имеете в виду шаблон Singleton:
class Foo { private static $instance; private function __construct() { } public static function getInstance() { if (!isset(static::$instance)) { static::$instance = new static(); } return static::$instance; } }