<?php

declare(strict_types=1);

namespace VK\Traits;

/**
 * Паттерн singleton
 */
trait Singleton
{
    /**
     * Экземпляр класса
     *
     * @var LoggerAbstract 
     */
    protected static $instance;

    /**
     * Блокировка конструктора
     */
    protected function __construct()
    {
    }

    /**
     * Инициализатор экземпляра класса
     * 
     * @return LoggerAbstract
     */
    public static function init(): self
    {
        if (self::$instance === null) self::$instance = new self;
        return self::$instance;
    }

    /**
     * Блокировка магического метода __clone()
     */
    private function __clone()
    {
    }

    /**
     * Блокировка магического метода __sleep()
     */
    private function __sleep()
    {
    }

    /**
     * Блокировка магического метода __wakeup()
     */
    private function __wakeup()
    {
    }
}