Задать вопрос

Использование реестра через wrapper без синглтона в PHP?

Насколько уместно использование подобной конструкции для использования реестра:

$___REGISTER = (object) array(); // Создаем StdClass для работы с массивом как с объектом

function &Reg()
{
    return $GLOBALS['___REGISTER'];
}

// Применение

Reg()->config = (object) array();
Reg()->config->host = 'habrahabr.ru';
Reg()->config->admin = 'admin@habrahabr.ru';
Reg()->config->name = 'Хабрахабр';

// ... и т.д. и т.п.



Использую для замены:
Register::set('config', array(/*... */));
$config = Register::get('config');



Какие подводные камни могут быть при использовании такой обертки? Использовали бы вы такой враппер в своих проектах? Где его 100% не нужно использовать?
  • Вопрос задан
  • 2487 просмотров
Подписаться 3 Оценить 1 комментарий
Ответ пользователя Алексей Шеин К ответам на вопрос (3)
conf
@conf
Ruby developer
Если вы планируете тестировать собственный код (в смысле автоматизированно, например, с помощью PHPUnit), не используйте синглтоны, не говоря уже о глобальных переменных (которые вы привели в пример). Почитайте что такое тестируемый дизайн и принцип Dependency Injection. Если вы читаете по-английски, рекомендую вот эту ссылку misko.hevery.com/code-reviewers-guide/ и презентацию
www.procata.com/talks/phptek-may2007-dependency.pdf
Вот здесь есть описание компонентов Symfony в переводе на русский: madbee.ukr.su/solenko/dependency-injection/
Ответ написан