68 lines
1.2 KiB
PHP
68 lines
1.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace hood\vk\traits;
|
|
|
|
use Exception;
|
|
|
|
/**
|
|
* Паттерн singleton
|
|
*/
|
|
trait singleton
|
|
{
|
|
/**
|
|
* Заблокирован
|
|
*/
|
|
private function __construct()
|
|
{
|
|
static $hasInstance = false;
|
|
|
|
if ($hasInstance) {
|
|
throw new Exception('Повторная сборка запрещена');
|
|
}
|
|
|
|
$hasInstance = true;
|
|
}
|
|
|
|
/**
|
|
* Инициализация
|
|
*
|
|
* @return self
|
|
*/
|
|
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('Десериализация запрещена');
|
|
}
|
|
}
|