За последние 24 часа нас посетили 16203 программиста и 1311 роботов. Сейчас ищут 908 программистов ...

Макрогенератор PHP

Тема в разделе "Прочее", создана пользователем kuraga, 12 май 2010.

Статус темы:
Закрыта.
  1. kuraga

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

    С нами с:
    16 фев 2008
    Сообщения:
    97
    Симпатии:
    0
    Я безумно удивлен, что у ИНТЕРПРЕТАТОРА, такого, как ПХП, нет макроязыка. Ну, например, так:
    Код (Text):
    1.  
    2. BEGIN_DB("select * from atable")
    3. echo($row["name"]."\n");
    4. END_DB()
    Как короче! Ну хотя бы Си-функционал препроцессора...

    Или такое есть? Я с учебной целью хочу попытаться это сделать. Вопрос: как сделать "слой", который передает непосредственно на этап парсинга текст файла, отличный от исходного? Это отдельная программа? Или модуль ПХП? Или проще менять код ПХП?
     
  2. Ты, вообще, о чем?
     
  3. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Он об "evil" :)
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    походу об этих пережитках Си
    Код (Text):
    1. #define MACRO(a) printf("%s",a);
    2. или
    3. inline void func(char *a){
    4.      printf("%s",a);
    5. }
    kuraga
    в пхп этого не нужно. потому как он интерпретируемый и такие манипуляции не принесли бы никакой пользы. а так же по ряду других причин =)
     
  5. kuraga

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

    С нами с:
    16 фев 2008
    Сообщения:
    97
    Симпатии:
    0
    В УЧЕБНЫХ ЦЕЛЯХ. И это не eval. Эта функция принимает только законченные конструкции. Про пережитки не согласен, но спорить не буду. А какие еще причины? Я вот думал наоборот - у интерприттера макро должны быть еще сильнее... Вопрос в силе.
     
  6. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    препроцессор препроцессора нужен?
     
  7. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Я вот в упор отказываюсь понимать глупость.

    C/C++ понимает тоже только законченные конструкции сколько бы макросов там ни было.
    Попытка скомпилировать невалидный код - вызовет ошибку.

    Но "до" этого этапа код может быть в любом состоянии.

    Вполне рабочее решение
    Код (Text):
    1. DB('select * from `table`)->output('name', 'value');
    А вот еще одно
    PHP:
    1.  
    2. <?php
    3. DB('select * from `table`')->output(function($row) {
    4.     $result = false;
    5.     if ($row['id'] > 10) {
    6.         $result = $row['name'] . ' - ' . $row['value'];
    7.     }
    8.     return $result
    9. });
     
  8. kuraga

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

    С нами с:
    16 фев 2008
    Сообщения:
    97
    Симпатии:
    0
    Я как раз об этом. Препроцессор не парсит код, который подставляет. Eval же его выполняет... Ничего общего.
    А по поводу самого ВОПРОСА?
     
  9. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    На
    http://www.smarty.net/

    дарю, для извращенцев, которые не понимают смысла собственного же вопроса.
     
  10. kuraga

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

    С нами с:
    16 фев 2008
    Сообщения:
    97
    Симпатии:
    0
    Ну ладно уж так :) Я формулировать не умею...
     
  11. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    kuraga
    В отличии от C/C++

    В PHP любой код можно собрать средствами самого языка и сразу же выполнить.

    PHP:
    1. <?php
    2.  
    3. '<?php
    4. var_dump($_SERVER);'
    5. );
    6. include('inc.php');
    Файл inc.php до запуска скрипта не существовал.

    Поэтому вот это
    крайне смешно.

    В PHP в качестве препроцессора можно использовать все средства языка и функционал много выше.
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    про злую функцию он так и не просек...
     
  13. kuraga

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

    С нами с:
    16 фев 2008
    Сообщения:
    97
    Симпатии:
    0
    Товарищи, мы говорим просто о разных вещах... Я не говорю, что это нужно. Я говорю, что во всех компиляторах (я не спорю, это не компилятор) есть ТУПАЯ ЗАМЕНА ОДНОГО ТЕКСТА (КОДА) НА ДРУГОЙ. Безо всяких инклюдов, бешеного количества кавычек и т.д. Про злую я не просек. Но не надо тут демона из меня делать...... Все пользуются "этими пережиткамми пережитками" в виде макросов Си (ну я не знаю, м.б. в компаниях - нет...), и я просто удивлен, что в инструменте, который носит название Preprocessor, такого функционала нет.

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

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    но есть другие. не надо печалиться о том, чего нет.
    а когда они стали пережитками?
     
  15. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    не надо искать черную кошку в темной комнате, когда кошка от туда ушла.
     
  16. kuraga

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

    С нами с:
    16 фев 2008
    Сообщения:
    97
    Симпатии:
    0
    Когда их так назвали три часа назад)))))) Читайте выше... Я не печалюсь, хотя мне было бы удобно, не говорю, что это правильно.

    Да, но замена - это элементарная частица! Зачем ее убирать? Это наиболее простая операция во всей цепочке... И, в определенном смысле, универсальная.

    Так что про злую и про ряд причин?
     
  17. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Кто и когда ее убрал?

    Раз уж вы безумно удивлены этим фактом, то потрудитесь привести пруфлинк на этот факт.
    Где, и когда в PHP была убрана возможность замены одного куска текста на другой?
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    evil фунцыкья =)

    ничто не мешает сделать типа как-то так:
    PHP:
    1.  
    2. <?php
    3. function abc($a) {
    4.   $a = "echo '$a'; ";
    5.   $a = $a . $a . $a . $a . $a . $a . $a . $a . $a . $a;
    6.   eval ($a);
    7. }
    8.  
    9. abc('pupu! ');
    10. echo 'lalala!';
    11. ?>
    12.  

    не занудствуй. всем понятно, что у человека крик души, и что он хотел сказать ясно. =) бедняга.

    ЗЫ: чем плохи классы? тут уж точно можно сделать легкочитаемый коди без этих макро.
     
  19. kuraga

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

    С нами с:
    16 фев 2008
    Сообщения:
    97
    Симпатии:
    0
    Тьфу... Все я просек... Ну не то это. Просто сложнее. Сравните Ваш код и реализацию на Си-макросах...

    "Убрали" = "не сделали" :)

    А про классы я согласен. Просто есть простые цели. И их можно было бы реализвать просто. А не заставлять пользоваться таким громадным средством, как ООП.
     
  20. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    не надо нам сюда макросов. не надо перетаскивать функционал одного языка в другой только потому, что вы так привыкли.

    учитесь программить независимо. я 25 лет в программировании и как-то обходился одним и другим.
     
  21. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Что значит не сделали?
    Почему мой код тогда работает?
     
  22. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    знавал одних Паскальщиков которые в C вместо {} макросами подставляли BEGIN и END. Извращенцы.
     
  23. kuraga

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

    С нами с:
    16 фев 2008
    Сообщения:
    97
    Симпатии:
    0
    хА-ХА..... Извращенцы, согласен...

    Вы хоотите сказать, что eval можно сравнить с макросами? Спорно...
     
  24. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    kuraga

    да не нужен там ни eval(), ни макросы. все можно красиво сделать и без них, а от привычек надо отучаться так же как и приучались.
     
  25. kuraga

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

    С нами с:
    16 фев 2008
    Сообщения:
    97
    Симпатии:
    0
    eval я не использую, самообман какой-то... ок)))))))))))
     
Статус темы:
Закрыта.