Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
Одиночка (англ. Singleton) — порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру.
У класса есть только один экземпляр, и он предоставляет к нему глобальную точку доступа. При попытке создания данного объекта он создаётся только в том случае, если ещё не существует, в противном случае возвращается ссылка на уже существующий экземпляр и нового выделения памяти не происходит. Существенно то, что можно пользоваться именно экземпляром класса, так как при этом во многих случаях становится доступной более широкая функциональность.
PHP 5
<?php class Singleton { private static $instance; // экземпляр объекта private function __construct(){ /* ... @return Singleton */ } // Защищаем от создания через new Singleton private function __clone() { /* ... @return Singleton */ } // Защищаем от создания через клонирование private function __wakeup() { /* ... @return Singleton */ } // Защищаем от создания через unserialize public static function getInstance() { // Возвращает единственный экземпляр класса. @return Singleton if ( empty(self::$instance) ) { self::$instance = new self(); } return self::$instance; } public function doAction() { } } /* Применение */ Singleton::getInstance()->doAction(); // ?>
php 5.4
<?php trait Singleton { private static $instance = null; private function __construct() { /* ... @return Singleton */ } // Защищаем от создания через new Singleton private function __clone() { /* ... @return Singleton */ } // Защищаем от создания через клонирование private function __wakeup() { /* ... @return Singleton */ } // Защищаем от создания через unserialize public static function getInstance() { return self::$instance===null ? self::$instance = new static() // Если $instance равен 'null', то создаем объект new self() : self::$instance; // Иначе возвращаем существующий объект } } /** * Class Foo * @method static Foo getInstance() */ class Foo { use Singleton; private $bar = 0; public function incBar() { $this->bar++; } public function getBar() { return $this->bar; } } /* Применение */ $foo = Foo::getInstance(); $foo->incBar(); var_dump($foo->getBar()); $foo = Foo::getInstance(); $foo->incBar(); var_dump($foo->getBar()); ?>