design-patterns

Форк
0
48 строк · 1.1 Кб
1
<?php
2

3
namespace App\Creational\Singleton;
4

5
final class Singleton
6
{
7
    /**
8
     * @var null|Singleton
9
     */
10
    private static ?Singleton $instance = null;
11

12
    /**
13
     * Is not allowed to call from outside to prevent from creating multiple instances,
14
     * to use the singleton, you have to obtain the instance from Singleton::getInstance() instead.
15
     */
16
    private function __construct()
17
    {
18
    }
19

20
    /**
21
     * Prevent the instance from being cloned (which would create a second instance of it).
22
     */
23
    private function __clone()
24
    {
25
    }
26

27
    /**
28
     * Prevent from being unserialized (which would create a second instance of it).
29
     */
30
    public function __wakeup()
31
    {
32
        throw new \Exception('Cannot unserialize singleton');
33
    }
34

35
    /**
36
     * Gets the instance via lazy initialization (created on first usage).
37
     *
38
     * @return null|Singleton
39
     */
40
    public static function getInstance(): ?self
41
    {
42
        if (self::$instance === null) {
43
            self::$instance = new self();
44
        }
45

46
        return self::$instance;
47
    }
48
}
49

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.