ФорумПрограммированиеPHP для идиотов → "Предкомпиляция" классов

"Предкомпиляция" классов

  • Trieg

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

    Spritz 14 сентября 2010 г. 3:18

    буду краток.

    Нам захотелось юзать множественное наследование (ну или еще какуюнить хуергу), а этого само собой в пыхе нету.

    Теоретическое решение проблемы:
    1 - меняем логику аутолода
    было

    function loadClass($className)
    {
    $file = 'Directory/Class/' . str_replace(array('\\', '_'), '/', $className) . '.php';

    if(file_exists($file))
    {
    require_once $file;
    }
    }

    стало

    function loadClass($className)
    {
    $file = 'Directory/Class/'. str_replace(array('\\', '_'), '/', $className) . '.php';
    $cache= 'Directory/Cache/'. str_replace(array('\\', '_'), '/', $className) . '.php';

    if(!file_exists($cache) || filemtime($cache) < filemtime($file))
    {
    $compiler = new PCompiler();
    $compiler->readFile($file)->applyExtension(array('utf8String', 'typeHint', 'classMultiExtends'))->getNewCode();

    file_put_content($cache, $compiler);
    }

    require_once $cache;
    }


    2 - умираем и реализуем PCompiler и его расширения.
    3 - радуемся жизни и добавляем разные плюшки по мере надобности

    На первый взгляд кажется что это будет удобно. (я просто мечтаю переебенить большинство нативных функций, хотя это наверно самое бесполезное что можно сделать).

    В общем кто что думает по этому поводу. Есть ли смысл с этим замарачиватся? Вы бы сами стали юзать подобное?
  • adw0rd

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

    Spritz 14 сентября 2010 г. 3:27, спустя 8 минут 57 секунд

    Я думаю это прикольно, только потому что пхп гавно
    Где реализацию PCompiler посомтреть?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Trieg

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

    Spritz 14 сентября 2010 г. 4:57, спустя 1 час 29 минут 50 секунд

    Мне эта мысля тока седня в голову залетела, так что пощупать пока нечего.
  • phpdude

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

    Spritz 14 сентября 2010 г. 8:01, спустя 3 часа 4 минуты 47 секунд

    множественное наследование?) зачем оно? :) сборщик пхп кода из других классоц писать имхо пиздец) может лучше отказаться от этой идеи и писать как все? используя немножественное наследование?) ага, пых гавно
    Сапожник без сапог
  • Абырвалг

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

    Spritz 14 сентября 2010 г. 9:58, спустя 1 час 56 минут 39 секунд

    Нам захотелось юзать множественное наследование

    наверно вы просто что-то не так делаете
  • VaseninM

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

    Spritz 14 сентября 2010 г. 10:05, спустя 7 минут 2 секунды

    И почему это пых говно в контексте этой темы?
  • mario

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

    Spritz 14 сентября 2010 г. 10:08, спустя 3 минуты 2 секунды


    И почему это пых говно в контексте этой темы?
    пых по дефолту говно! )))
  • Trieg

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

    Spritz 14 сентября 2010 г. 11:07, спустя 58 минут 59 секунд

    на множественное наследование почти срать так как оно уже есть "из коробки" (вроде как..)

    чисто в прикол


       public function :array:string parseTemplate(:localFile $file) cache {$file.MTime}
       {
           if(self.isTpl($file))
           {
               :return array(this.getPattern($file), this.getBlock($file));
           }
           else
           {
               :return parent.newTemplate($file);
           }
       }


    на выходе что то типа


       public function parseTemplate($file)
       {
           use Framework\Cache\SqLite3\Method as Cache;
           
           $file = realpath($file);
           if(!is_file($file) || !is_readable($file))
           {
               throw new \InvalidArgumentException('axtyng');
           }
           
           if($cache = Cache::get(func_get_args(), array(Cache::CHECK_MTIME, $file))
           {
               return $cache;
           }
           
           $__checkFun = function($var)
           {
               if(!(is_string($var) || is_array($var)))
               {
                   throw new \LogicException('Only array and string');
               }
               return $var;
           };
           
           return Cache::add(
               func_get_args(),
               $__checkFun((self::isTpl($file)) ? array($this->getPattern($file), $this->getBlock($file)) : parent::newTemplate($file))
           );
       }


    пример конечно злой и не кто такое делать не будет, но вот местами залепить автоматическую кодогенерацию это вариант
    PS:при пральном применении множественное наследование не хило облегчает жизнь.(тока подумать какой простор для быдлокодинга….)
  • VaseninM

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

    Spritz 14 сентября 2010 г. 11:13, спустя 5 минут 44 секунды

    В пыхе множественнго наследования нет. А почти в любом фреймворке есть кодогенераторы.
  • adw0rd

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

    Spritz 14 сентября 2010 г. 11:30, спустя 17 минут 21 секунду


    И почему это пых говно в контексте этой темы?
    может потомучто у него нет множественного наследования, вроде из-за этого вся тема зародилась, нет?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • VaseninM

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

    Spritz 14 сентября 2010 г. 11:52, спустя 22 минуты 23 секунды

    adw0rd, ну в java нет множественного наследования. Ява от этого становится говном?
    Ну и сам я не занимался проблеммой множественного наследования, но вот цитата с википедии:
    Множественное наследование критикуется за следующие проблемы, возникающие в некоторых языках, в частности, C++:

    * семантическая неопределенность часто совокупно представляется как Проблема ромба.[3]
    * отсутствует возможность явного многократного наследования от одного класса[источник не указан 261 день]
    * порядок наследования изменяет семантику класса[источник не указан 261 день]

    Множественное наследование в языках с конструкторами в стиле C++/Java усиливает проблему наследования конструкторов и последовательностей конструкторов, таким образом создавая проблемы с поддержкой и расширяемостью в этих языках. Объекты в отношениях наследования со значительно отличающимися методами конструирования довольно трудны для реализации в рамках парадигмы последовательности конструкторов.[уточнить]

    Ну и если что - мнжественное наследование можно частично эмулировать делегированием (вроде так метод называется).
  • adw0rd

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

    Spritz 14 сентября 2010 г. 12:11, спустя 18 минут 47 секунд

    SpartakuS, значит java гавно
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • kostyl

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

    Spritz 14 сентября 2010 г. 12:18, спустя 7 минут

    бля, сколько я программил, никогда не надо было множественное наследование, ну может были намёки на идеи в некоторых местах, но они не были такими весомыми, даже если учитывать, что языки эту фичу не поддеривали…
  • kostyl

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

    Spritz 14 сентября 2010 г. 12:25, спустя 6 минут 58 секунд

    Ну и если что - мнжественное наследование можно частично эмулировать делегированием (вроде так метод называется).

    Вообще последнее время все советуют любое наследование заменять делегированием, особенно если не катит подстановка Лискоу…
  • Trieg

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

    Spritz 14 сентября 2010 г. 12:29, спустя 3 минуты 56 секунд

    В пыхе множественного наследования нет.

    А как же Traits и Grafts… кстати Traits уже в транке.
    PS: так и знал что пример с наследованием будет не удачным =)

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