ФорумПрограммированиеPHP для идиотов → Моя версия реестра — lazy registry.

Моя версия реестра — lazy registry.

  • artoodetoo

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

    Spritz 13 марта 2010 г. 13:11, спустя 15 минут 24 секунды

    что приходит на ум:
    - значения уровня сессии: "корзина" в магазине, последние просмотренные темы или загруженные картинки.
    - значения уровня приложения: список пользователей онлайн, канал чата
    меня завораживает сам факт, что эти штуки можно добывать как кролика из шляпы, без видимых выкрутасов

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

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

    Spritz 25 марта 2010 г. 12:21, спустя 11 дней 23 часа 9 минут

    вопрос - както надо наложить на это еще интерфейсы, я вот думаю сижу над этим првктически в данный момент


    есть функция class_implements. можно сделать что-то типа

    $router = Qb::get('router');
    if (!array_key_exists('IQbRouter', class_implements($router)))
    die('not a router');

    ну и, конечно, зашить такие проверки в сам "реестр". придумать нотацию для конфига вроде:

    array(
    //…
       'router' =>  array ('MyProgressiveThing', 'interface'=>'IQbRouter'),
    // …



    Update: или типа так:

    class Qb
    {
    // …
    public static function get($name, $iface)
    {
       // …
       if (!array_key_exists($iface, class_implements($result)))
           throw new Exception('Fuck!!! '.$name.' is not an '.$iface);
       return $result;
    }
    }

    // …
    $router = Qb::get('router', 'IQbRouter');
    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 25 марта 2010 г. 12:29, спустя 8 минут 16 секунд

  • artoodetoo

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

    Spritz 25 марта 2010 г. 12:41, спустя 12 минут 24 секунды

    угу
    ιιlllιlllι унц-унц
  • artoodetoo

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

    Spritz 26 марта 2010 г. 13:41, спустя 1 день 59 минут

    я когда тестировал instanceof был опиздошен сбит с толку
    [tt]$router instanceOf 'IQbRouter'[/tt] — ошибка времени компиляции
    [tt]$router instanceOf IQbRouter[/tt] — нормалёк
    ну я и забИл

    на самом деле непонятно чем плоха строка, с переменной всё ok
    [tt]$iface = 'IQbRouter';[/tt]
    [tt]$router instanceOf $iface[/tt] — нормалёк

    итого:

    public static function get($name, $iface)
    {
       // …
       if (! ($result instanceof $iface))
           throw new Exception('Fuck!!! '.$name.' is not an '.$iface);
       return $result;
    }
    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 25 марта 2010 г. 13:19, спустя 23 часа 38 минут 26 секунд

    это ж php, не стоит удивляться) Я сам на строке попадался пару раз.
  • artoodetoo

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

    Spritz 25 марта 2010 г. 13:28, спустя 8 минут 19 секунд

  • phpdude

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

    Spritz 25 марта 2010 г. 13:49, спустя 21 минуту 43 секунды


    это ж php, не стоит удивляться) Я сам на строке попадался пару раз.
    это же конструкция языка, а они так себе реализованы

    вот ещевам прикол

    Example #4 Comparing return value of include

    <?php
    // won't work, evaluated as include(('vars.php') == 'OK'), i.e. include('')
    if (include('vars.php') == 'OK') {
    echo 'OK';
    }

    // works
    if ((include 'vars.php') == 'OK') {
    echo 'OK';
    }
    ?>

    Сапожник без сапог
  • rider-sx

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

    Spritz 25 марта 2010 г. 22:59, спустя 9 часов 10 минут 5 секунд

    Я прошу прощения, но нахуй оно нужно то?)))
    Спустя 13 сек.
    ЗЫ 2300
  • phpdude

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

    Spritz 26 марта 2010 г. 3:22, спустя 4 часа 23 минуты 2 секунды


    Я прошу прощения, но нахуй оно нужно то?)))
    Спустя 13 сек.
    ЗЫ 2300
    проваливай, если не понимаешь :)
    Сапожник без сапог
  • artoodetoo

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

    Spritz 8 апреля 2010 г. 10:52, спустя 13 дней 6 часов 29 минут

    Новая дема http://pyhapyha.ru/blog/Qb/74.html
    =>
    registry::getComponent(name, intefrace)
    запуск приложения цепочкой x::init()->dance()->vodka()->xxx()
    обращение к registry через $component->var
    события beforeBar, onBar, afterBar

    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 20 июня 2010 г. 14:34, спустя 73 дня 3 часа 42 минуты

    array(
    //…
    'router' => array ('MyProgressiveThing', 'interface'=>'IQbRouter'),
    // …

    слушай, а что если взять и удалить отсюда эту проверку? Ну сам посуди, зачем твоему `Qb` разбираться в том кто там что имплиментит? Все равно ты внутри классов-реципиентов будешь указывать нужный тип:

    class Foo
    {
    public function setBar(Bar $bar)
    {
    }
    }

    то есть проверка на соотв. типу будет и так произведена
  • artoodetoo

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

    Spritz 21 июня 2010 г. 6:48, спустя 16 часов 13 минут 35 секунд

    это не факт, что она будет куда-то подставляться. вот такой вариант возможен:

    Components::get('db')->commit();
    ιιlllιlllι унц-унц
  • LIFF

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

    Spritz 22 июня 2010 г. 3:09, спустя 20 часов 20 минут 47 секунд

    Читал 1 и надеюсь последнюю странцу, но могу сказать КАкой это нах рееестр….., который делает instanse of object. Или тебе 1. нада срочно перечитать (щас будетмногго слов) пттерны или 1 пункт повторить.
  • LIFF

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

    Spritz 22 июня 2010 г. 3:28, спустя 19 минут 11 секунд

    Давно на пыхе не был, всем привет.))

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