ФорумПрограммированиеPHP для идиотов → Реестр или контейнер?

Реестр или контейнер?

  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 23 июля 2010 г. 11:13

    Пишу свой фреймворк дивгло :) Как лучше плагину передавать объекты системные?
    Есть два варианта:
    1) Делать реестр

    class Registry {
     public static $_ = array();
    }

    В который сначало добавляется интанс класса

    Registry::$_['Router']['instance'] = new Router;

    А потом в плагине уже юзать инстанс из реестра

    class Plugin {
     function init () {
       $action = Registry::$_['Router']['instance']->action;
     }
    }


    2) Передавать в плагин контейнер

    class Plugin {
     function init ($container) {
       $action = $container['Router']['instance']->action;
     }
    }

    $container = array('Router' => array('instance' => new Router));
    $plugin = new Plugin;
    $plugin->init($container);


    Или может есть еще какие варианты?
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 23 июля 2010 г. 12:21, спустя 1 час 8 минут 34 секунды

    Зачем нужен аппендикс в виде ['instance'] ?

    А не лучше ли создавать экземпляр по первому запросу? — ленивая инициализация.
    ιιlllιlllι унц-унц
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 24 июля 2010 г. 0:08, спустя 11 часов 47 минут 1 секунду

    artoodetoo, для того, что бы, к примеру, роутер мог хранить в своей области переменные, хотя может быть это и лишнее :)
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 24 июля 2010 г. 0:31, спустя 22 минуты 4 секунды

    есть таккой вариант
    Loader::lib('lib_name');
    Спустя 194 сек.
    пример в приложении
    1. loader.rar (36)
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 24 июля 2010 г. 1:17, спустя 46 минут 14 секунд

    soulgarden, Ну у тебя грубо говоря контейнер)
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 24 июля 2010 г. 1:25, спустя 8 минут 42 секунды


    soulgarden, Ну у тебя грубо говоря контейнер)


    может быть. но код вызова библиотеки попроще. а проблема с зависимостями и расширением решается помещением либы с тем же названием в папку application/libs/ как в кохане
    еще думаю что делать, если либу хочется не перегрузить полностью, а только некоторые методы, те наследовать :-) в кохане решение хорошее, но там надо лезть в папку system чего не хочется..
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 24 июля 2010 г. 6:37, спустя 5 часов 11 минут 29 секунд

    rider-sx, эти переменные нужны ему только один раз, при создании. доступ к ним должен быть только у самого роутера, так? а у тебя выглядит так, что можно получить его данные отовсюду.
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 24 июля 2010 г. 6:45, спустя 7 минут 50 секунд

    Описания компонент - имя класса, параметры инициализации можно держать в приватном свойстве реестра.
    ::getComponent() похож на синглтоновский getInstance, создает только один экземпляр, но не своего, а других классов.
    Например для компонента 'db' нужны логин/пароль, их сможет прочитать только сам компонент 'db' при создании.

    ιιlllιlllι унц-унц
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 24 июля 2010 г. 12:13, спустя 5 часов 28 минут 7 секунд


    rider-sx, эти переменные нужны ему только один раз, при создании. доступ к ним должен быть только у самого роутера, так? а у тебя выглядит так, что можно получить его данные отовсюду.
    Да, именно так :)

    Описания компонент - имя класса, параметры инициализации можно держать в приватном свойстве реестра.
    ::getComponent() похож на синглтоновский getInstance, создает только один экземпляр, но не своего, а других классов.
    Например для компонента 'db' нужны логин/пароль, их сможет прочитать только сам компонент 'db' при создании.


    Ох спасибо тебе :) Пожалуй так и сделаю
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 24 июля 2010 г. 12:18, спустя 4 минуты 39 секунд

    и опять автодополнение идет по пизде…
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 24 июля 2010 г. 12:45, спустя 27 минут 28 секунд

    используйте паттерн Мусорка, ахуенный, я недавно про него узнал
    Сапожник без сапог
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 24 июля 2010 г. 14:07, спустя 1 час 21 минуту 53 секунды


    используйте паттерн Мусорка, ахуенный, я недавно про него узнал


    лол
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 24 июля 2010 г. 14:09, спустя 1 минуту 39 секунд

    Абырвалг, блин, а почему оно не будет идти по пизде, если мы уходим от зависимости? ;) это же ясно как Божий День!
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 24 июля 2010 г. 14:37, спустя 28 минут 28 секунд

    генерируйте фейковые классы с phpDoc'ами. Я уже устал это повторять.

    $context->lib('db') - отстой
    $context->db() - Ъ
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 24 июля 2010 г. 15:24, спустя 46 минут 39 секунд

    $context->db()

    ну да, так заебись

Пожалуйста, авторизуйтесь, чтобы написать комментарий!