Ідея контейнерів у PHP

Даний приклад демонструє простий та зручний спосіб створення контейнерів.

Особисто я використовую у своїх проектах такі речі. Дуже зручно, наприклад, створити обгортку над сесіями, зберігати конфіги та ін.

Глобальні змінні не використовуються. функція keyVal($group, $key = NULL, $value = NULL) static $data = array(); if(!isset($data[$group])) $data[$group] = array(); if(is_null($key)) return $data[$group]; >else if(is_array($key)) if(sizeof($key) > 0) if(!isset($key[0])) $data[$group] = array_merge($data[$ group], $ key); >else $res = array(); foreach($key as $k) $res[$k] = isset($data[$group][$k]) ? $data[$group][$k] : NULL; return $res; > >else //error > >else if(is_null($value)) return isset($data[$group][$key]) ? $data[$group][$key] : NULL; >else $data[$group][$key] = $value; > > > >

#створюємо наші контейнери - проста копіпаста функції, змінюємо тільки ім'я function a($key = NULL, $value = NULL) < return keyVal(__FUNCTION__, $key, $value); > function b($key = NULL, $value = NULL)< return keyVal(__FUNCTION__, $key, $value); > function c($key = NULL, $value = NULL)< return keyVal(__FUNCTION__, $key, $value); > function d($key = NULL, $value = NULL)

#заповнюємо як ключ, значення a('a1', '111'); #Встановити ключ a1 = 111 a('a2', '222'); a('a3', '333'); #отримуємо значення echo 'A[a2] = '.a('a2').' '; #нам потрібен ключ a2 echo 'A[a5] = '.a('a5').' '; #ключа a5 ні - поверне NULL

$arr1 = array('a4' => '444', 'a5' => '555'); #підготували масив ключ => значення a($arr1); #додаємо елементи в контейнер echo 'A[a5] ='.a('a5').' '; #тепер ключ a5 є

$arr2 = array('a' => 1, 'b' => 2, 'c' => 3); b($arr2); #Створили контейнер echo 'B[a] = '.b('a').' ';

$arr3 = array('a', 'b', 'c'); c($arr3); #нічого не станеться - на вхід тільки асоціативні масиви

$arr4 = array(); d($arr4); #нічого не станеться - порожній масив

echo 'A: '.print_r( a(), true ).' '; #отримати всі значення контейнера echo 'A(array keys): '.print_r( a( array('a2', 'a5', 'a7') ), true ).' '; #отримати необхідні пари ключ => значення echo 'B: '.print_r( b(), true ).' '; echo 'C: '.print_r( c(), true ).' '; #порожній масив echo 'D: '.print_r( d(), true ).' '; #порожній масив

На «будь-який» випадок, якщо раптом хабр поріже текст: pastebin.ubuntu.com/674681

Як я використовую контейнери "в житті": 0. function config($key = NULL, $value = NULL) < return keyVal(__FUNCTION__, $key, $value); > 1. ініціалізуємо конфіг: config($config); //де $config - представлений як масиву ini файл 2. у будь-якому місці коду отримую та встановлюю значення: config('db_name') та config('time', time()); 3. після виконання коду або register_shutdown_function отримую весь масив $config = config() і знову поміщаю в ini файл, якщо змінився «хеш» файлу (до конфіг були внесені зміни)