Singleton Trait (PHP)

Начиная с версии PHP 5.4 в языке появились типажи или трейты (Trait), при помощи которых очень удобно реализовать такой шаблон проектирования как Singleton.

Singleton и Trait

Реализация синглтона через трейты ниже. Следует обратить внимание, что трейт находится в неймспейсе Traits, а класс называется SingletonTrait (расположение файла Traits/SingletonTrait.php).

<?php namespace Traits; trait SingletonTrait { /** * @var array список объектов */ private static $instances = []; /** * @return self */ public static function single() { if (!isset(self::$instances[static::class])) { self::$instances[static::class] = new static; } return self::$instances[static::class]; } }

Test class

Создадим тестовый класс. Следует обратить внимание, тестовый класс находится в неймспейсе Classes, а название файла Test (расположение файла Classes/Test.php).

<?php namespace Classes; use Traits\SingletonTrait; class Test { use SingletonTrait; public $value = 0; }

После использования SingletonTrait в классе Test, можно использовать статический метод test().

Пример использования

Ниже пример использования. При помощи метода Test::single() создается и возвращается единственный экземпляр класса Test.

<?php $a = \Classes\Test::single(); echo $a->value; // выведет 0 $a->value = 5; echo $a->value; // выведет 5 $b = \Classes\Test::single(); echo $b->value; // выведет 5

Категории

ПрограммированиеPHPОбъектно-ориентированное программированиеООП в PHPPHP 5.4Trait в PHPШаблоны проектированияSingleton

Читайте также

Комментарии