За последние 24 часа нас посетили 16195 программистов и 1313 роботов. Сейчас ищут 672 программиста ...

настройка родителя из ребенка

Тема в разделе "Прочие вопросы по PHP", создана пользователем Koc, 28 сен 2009.

  1. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Плохого тут много. А именно наличие геморроя с наследованием от несвязанного объекта.

    Суть наследования, не только и не столько стремление убрать "лишний" код, а в контроль за характеристиками и поведением. Унаследовать ежа от ужа в теории можно, но не нужно.

    Наследовать Синглтон - суть которого в наличии только себя любимого - это ахинея :)

    У тебя и получилась помесь бульдога с носорогом. Ты фактически реализовал Builder, но не Singleton :)

    Не пытайся избавится от избыточности кода.
    KISS - делай это просто, но не проще.
    важнее чем
    DRY - не повторяй самого себя.

    Для облегчения работы лучше использовать кодогенерацию, благо php позволяет это сделать даже в runtime в отличии от других языков.
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Маленькое замечание. Чтобы не путаться потом с множественными окончаниями и опечатками в коде, лучше делать
    User, UserList, UserCollection
     
  3. kostyl

    kostyl Guest

    Это чё такое?
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Это из раздела метапрограммирования :)

    Например, есть некоторый набор методов и свойств. Есть ряд правил. И БД произвольной формы настраиваемой пользователем.
    Программа как таковая не пишется. Пишется кодогенератор, который уже и создает выполняемый код.

    К кодогенерации относится и создание стабов (stubs) на основе WSDL файлов для SOAP сервисов.
     
  5. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Кстати я встречал в инете утилиты для генерации PHP-кода на основе UML диаграмм из Dia.
     
  6. kostyl

    kostyl Guest

    бред вся эта кодогенерация. Delphi for PHP - Боже, как нелепо это звучит!!!
     
  7. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Да, да. Вы правы.

    А еще Singleton, Delegate, Factory, Registry - все это такой бред...
    То ли дело, старое доброе процедурное программирование.
     
  8. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    уж лучше структурное, гыгыгы
     
  9. kostyl

    kostyl Guest

    Причем тут шаблоны? Не надо обобщать необобщаемое
     
  10. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    При том, что вы не решали задач, в которых нужна кодогенерация, но беретесь выносить вердикты.
     
  11. kostyl

    kostyl Guest

    не решал. И не собираюсь, если честно.
     
  12. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Это ваше право.

    При работе с домашними страницами, блогами и шаблонными магащзинами кодогенерация практически не нужна.
    С более сложными задачами работают не так часто.
     
  13. kostyl

    kostyl Guest

    Что то мне слабо вериться, что, на сколько я понял, кодогенерация нужна для более сложных задач.
     
  14. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
  15. kostyl

    kostyl Guest

    а это генерация php кода?
     
  16. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Все хватит с меня на сегодня.

    Перечитайте мои посты за вечер. Там все объяснено.
     
  17. kostyl

    kostyl Guest

    читать не буду. Я понял, что мы друг друга не поняли. Мир, дружба, жвачка.
    Кос. Все, можешь продолжать свою тему )))))
     
  18. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    продолжаю.
    Прошлая реализация get_called_class для PHP < 5.3.0 оказалась не подходящей для множественного такого наследования.
    PHP:
    1. <?php
    2. if (!function_exists('get_called_class')) {
    3.     function get_called_class()
    4.     {
    5.         $bt = debug_backtrace();
    6.         $l = 0;
    7.         do {
    8.             $l++;
    9.             $lines = file($bt[$l]['file']);
    10.             $callerLine = $lines[$bt[$l]['line']-1];
    11.             preg_match('/([a-zA-Z0-9\_]+)::'.$bt[$l]['function'].'/',
    12.                 $callerLine,
    13.                 $matches);
    14.            
    15.             if ($matches[1] == 'self') {
    16.                 $line = $bt[$l]['line']-1;
    17.                 while ($line > 0 && strpos($lines[$line], 'class') === false) {
    18.                     $line--;                  
    19.                 }
    20.                 preg_match('/class[\s]+(.+?)[\s]+/si', $lines[$line], $matches);
    21.             }
    22.        
    23.         } while ($matches[1] == 'parent'  && $matches[1]);
    24.        
    25.         return $matches[1];
    26.     }
    27. }
    28.  
    эта вроде работает. Из комментов php.net.
     
  19. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    не один я такой)
    http://www.slideshare.net/fabpot/php-53-in-practice , страница 28
     
  20. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Тебя радует что не один дурак, а два? :)

    Я думаю, если ты пообщаешься с Fabien Potencier он тебе объяснит недостатки приведенного варианта.

    Посмотри лучше в сторону Phemto, не факт что его возможности дадут тебе реализовать синглтоны, но это лучше чем множественное наследование.
     
  21. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    ну не то, что б радует, греет душу)

    да он за 3-5 слайдов до этого писал, что синглтон плохо. Спору нет.

    [​IMG]

    Я не стою на месте. Теперь смотрю в сторону какой-то извращенной фабрики, которая могла б контролировать кол-во инстанций класса, возможно хранила бы настройки (реестр?), и в обход нее нельзя было б создать инстанцию. Вот ну не всегда DI удобно использовать (лично мне). В каких-нить либах типа Twig, Zend_Mail - да, это офигенски. А внутри своих каких-нить модулей - нет. Потом на примере велосипедных библиотек покажу, что именно мне не удобно.