vk/hood/vk/system/traits/singleton.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('Десериализация запрещена');
}
}