Я безумно удивлен, что у ИНТЕРПРЕТАТОРА, такого, как ПХП, нет макроязыка. Ну, например, так: Код (Text): BEGIN_DB("select * from atable") echo($row["name"]."\n"); END_DB() Как короче! Ну хотя бы Си-функционал препроцессора... Или такое есть? Я с учебной целью хочу попытаться это сделать. Вопрос: как сделать "слой", который передает непосредственно на этап парсинга текст файла, отличный от исходного? Это отдельная программа? Или модуль ПХП? Или проще менять код ПХП?
походу об этих пережитках Си Код (Text): #define MACRO(a) printf("%s",a); или inline void func(char *a){ printf("%s",a); } kuraga в пхп этого не нужно. потому как он интерпретируемый и такие манипуляции не принесли бы никакой пользы. а так же по ряду других причин =)
В УЧЕБНЫХ ЦЕЛЯХ. И это не eval. Эта функция принимает только законченные конструкции. Про пережитки не согласен, но спорить не буду. А какие еще причины? Я вот думал наоборот - у интерприттера макро должны быть еще сильнее... Вопрос в силе.
Я вот в упор отказываюсь понимать глупость. C/C++ понимает тоже только законченные конструкции сколько бы макросов там ни было. Попытка скомпилировать невалидный код - вызовет ошибку. Но "до" этого этапа код может быть в любом состоянии. Вполне рабочее решение Код (Text): DB('select * from `table`)->output('name', 'value'); А вот еще одно PHP: <?php DB('select * from `table`')->output(function($row) { $result = false; if ($row['id'] > 10) { $result = $row['name'] . ' - ' . $row['value']; } return $result });
Я как раз об этом. Препроцессор не парсит код, который подставляет. Eval же его выполняет... Ничего общего. А по поводу самого ВОПРОСА?
kuraga В отличии от C/C++ В PHP любой код можно собрать средствами самого языка и сразу же выполнить. PHP: <?php file_put_contents('inc.php', '<?php var_dump($_SERVER);' ); include('inc.php'); Файл inc.php до запуска скрипта не существовал. Поэтому вот это крайне смешно. В PHP в качестве препроцессора можно использовать все средства языка и функционал много выше.
Товарищи, мы говорим просто о разных вещах... Я не говорю, что это нужно. Я говорю, что во всех компиляторах (я не спорю, это не компилятор) есть ТУПАЯ ЗАМЕНА ОДНОГО ТЕКСТА (КОДА) НА ДРУГОЙ. Безо всяких инклюдов, бешеного количества кавычек и т.д. Про злую я не просек. Но не надо тут демона из меня делать...... Все пользуются "этими пережиткамми пережитками" в виде макросов Си (ну я не знаю, м.б. в компаниях - нет...), и я просто удивлен, что в инструменте, который носит название Preprocessor, такого функционала нет. А в основном я хотел понять, как в ПХП можно добавить свои синтаксические конструкции... Простого вида, которые не предполагают видоизменение остальных.
Когда их так назвали три часа назад)))))) Читайте выше... Я не печалюсь, хотя мне было бы удобно, не говорю, что это правильно. Да, но замена - это элементарная частица! Зачем ее убирать? Это наиболее простая операция во всей цепочке... И, в определенном смысле, универсальная. Так что про злую и про ряд причин?
Кто и когда ее убрал? Раз уж вы безумно удивлены этим фактом, то потрудитесь привести пруфлинк на этот факт. Где, и когда в PHP была убрана возможность замены одного куска текста на другой?
evil фунцыкья =) ничто не мешает сделать типа как-то так: PHP: <?php function abc($a) { $a = "echo '$a'; "; $a = $a . $a . $a . $a . $a . $a . $a . $a . $a . $a; eval ($a); } abc('pupu! '); echo 'lalala!'; ?> не занудствуй. всем понятно, что у человека крик души, и что он хотел сказать ясно. =) бедняга. ЗЫ: чем плохи классы? тут уж точно можно сделать легкочитаемый коди без этих макро.
Тьфу... Все я просек... Ну не то это. Просто сложнее. Сравните Ваш код и реализацию на Си-макросах... "Убрали" = "не сделали" А про классы я согласен. Просто есть простые цели. И их можно было бы реализвать просто. А не заставлять пользоваться таким громадным средством, как ООП.
не надо нам сюда макросов. не надо перетаскивать функционал одного языка в другой только потому, что вы так привыкли. учитесь программить независимо. я 25 лет в программировании и как-то обходился одним и другим.
хА-ХА..... Извращенцы, согласен... Вы хоотите сказать, что eval можно сравнить с макросами? Спорно...
kuraga да не нужен там ни eval(), ни макросы. все можно красиво сделать и без них, а от привычек надо отучаться так же как и приучались.