Files
vk/mirzaev/vk/system/traits/singleton.php
2021-07-27 15:09:33 +10:00

66 lines
1.1 KiB
PHP

<?php
declare(strict_types=1);
namespace mirzaev\vk\traits;
use Exception;
/**
* Паттерн singleton
*/
trait singleton
{
/**
* Заблокирован
*/
private function __construct()
{
static $hasInstance = false;
if ($hasInstance) {
throw new Exception('Повторная сборка запрещена');
}
$hasInstance = true;
}
/**
* Инициализация
*/
public static function init(): self
{
static $instance;
if (!isset($instance)) {
$instance = new self;
}
return $instance;
}
/**
* Заблокирован
*/
private function __clone()
{
throw new Exception('Клонировать запрещено');
}
/**
* Заблокирован
*/
public function __sleep()
{
throw new Exception('Сериализация запрещена');
}
/**
* Заблокирован
*/
public function __wakeup()
{
throw new Exception('Десериализация запрещена');
}
}