Файл GetInstanceTrait.php в Cotonti

Основное назначение файла GetInstanceTrait.php в системе Cotonti CMF — это реализация паттерна Singleton с использованием трейта для упрощения создания и управления единственным экземпляром класса.

Суть содержания кода:

  • Трейт GetInstanceTrait позволяет любому классу, который его использует, иметь единственный экземпляр этого класса, обеспечивая создание объекта только один раз.
  • Он использует статическое свойство $classInstances, чтобы хранить экземпляры классов, которые используют этот трейт.
  • Метод getInstance() проверяет, существует ли уже экземпляр текущего класса (используя его имя через static::class). Если экземпляр ещё не создан, он создается и сохраняется в массив $classInstances. В противном случае возвращается уже существующий экземпляр.

Как это работает:

  • Класс, который включает в себя этот трейт, может получить единственный экземпляр через метод getInstance(), гарантируя, что объект будет создан только один раз и его можно будет использовать повторно.

Основное преимущество:

  • Упрощает использование паттерна Singleton, позволяя избежать необходимости писать однотипный код для каждого класса, требующего этого паттерна.

находится по адресу: /system/traits/GetInstanceTrait.php

 

<?php
/**
 * @copyright (c) Cotonti Team
 * @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
 */

declare(strict_types=1); // Включение строгой типизации для данного файла

namespace cot\traits; // Определение пространства имён для использования трейта

trait GetInstanceTrait // Объявление трейта для реализации паттерна Singleton
{
    private static $classInstances = []; // Статическое свойство для хранения экземпляров классов

    /**
     * @return static
     */
    public static function getInstance(): self // Метод для получения экземпляра класса, использующего данный трейт
    {
        $class = static::class; // Получение имени текущего класса с помощью статической привязки
        if (!isset(self::$classInstances[$class])) { // Если экземпляр класса ещё не был создан
            self::$classInstances[$class] = new static(); // Создаём новый экземпляр класса
        }
        return self::$classInstances[$class]; // Возвращаем экземпляр класса
    }
}

 

2 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 27.01.2025 23:34
  • Последнее обновление: 27.01.2025 23:34