PHP OOP: Singleton (Jedináček) [9]
Singleton je další návrhový vzor, který znamená, že daná třída má pouze jednu (globální) instanci a jen s tou se v aplikaci dále pracuje. Mezi typické použití patří vytvoření připojení do databáze.
Singleton příklad - databáze
https://github.com/hydroxid/php_examples/blob/main/3666_singleton/singleton_db.php
class Database
{
private static $db;
// disable direct call
private function __clone() { }
// disable direct call
private function __construct()
{
echo 'Only one instance of Database is created' . PHP_EOL;
}
public static function connect()
{
if (!isset(self::$db)) {
self::$db = new Database();
}
return self::$db;
}
}
$db1 = Database::connect();
$db2 = Database::connect();
$db3 = Database::connect();
Vrátí:
Only one instance of Database is created
Singleton příklad - více tříd
https://github.com/hydroxid/php_examples/blob/main/3666_singleton/singleton.php
class Singleton
{
private static Singleton $instance;
public Entity $entity;
// disable direct call
private function __clone() { }
// disable direct call
private function __construct()
{
echo 'Only one instance of Singleton is created' . PHP_EOL;
$entity = new Entity('name');
}
public static function getInstance() : Singleton
{
if (!isset(self::$instance)) {
self::$instance = new Singleton();
}
return self::$instance;
}
}
class Entity
{
public $name;
public function __construct(string $name)
{
$this->name = $name;
echo $this->name . PHP_EOL;
}
}
$singleton1 = Singleton::getInstance();
$singleton2 = Singleton::getInstance();
$singleton3 = Singleton::getInstance();
Vrátí:
Only one instance of Singleton is created
name