Паттерн проектирования Resource Acquisition Is Initialization - RAII (Получение ресурса есть инициализация) на PHP

Получение ресурса есть инициализация (англ. Resource Acquisition Is Initialization (RAII)) — программнаяидиома объектно-ориентированного программирования, смысл которой заключается в том, что получение некоторогоресурса совмещается с инициализацией, а освобождение — с уничтожением объекта.

Получение доступа к ресурсу происходит в конструкторе, а освобождение в деструкторе. Поскольку деструкторавтоматической переменной вызывается при выходе её из области видимости, то ресурс гарантированноосвобождается при уничтожении переменной. Это справедливо и в ситуациях, в которых возникают исключения. Этоделает RAII ключевой концепцией для написания безопасного при исключениях кода.


Применение

Эта концепция может использоваться для любых разделяемых объектов или ресурсов:

  • для выделения памяти,
  • для открытия файлов или устройств,
  • для мьютексов или критических секций и т. д.


Паттерн проектирования Resource Acquisition Is Initialization - RAII (Получение ресурса есть инициализация) на PHP

 1: <?php
 2:
 3:
class Guard
 4:
{
 5:     private 
$_callback;
 6:
 7:     public function 
__construct(Closure $callback)
 8:     {
 9:         
$this->_callback $callback;
10:     }
11:
12:     public function 
__destruct()
13:     {
14:         
call_user_func($this->_callback);
15:     }
16: }
17:
18:
$guard newGuard(
19:     function () {
20:         echo 
'destructor';
21:     }
22: );
23: unset(
$guard);//destructor

Теги: Получение ресурса есть инициализация, Raii, Порождающие шаблоны


Похожие статьи

Паттерн проектирования Builder (Строитель) на PHP

Паттерн проектирования Factory Method (Фабричный метод) на PHP

Паттерн проектирования Object pool (Объектный пул) на PHP

Паттерн проектирования Singleton (Одиночка) на PHP

Паттерн проектирования Abstract Factory (Абстрактная фабрика) на PHP

Паттерн проектирования Multiton (Пул одиночек) на PHP

Паттерн проектирования Lazy initialization (Отложенная инициализация) на PHP

Паттерн проектирования Prototype (Прототип) на PHP