Как создать шаблоны цикла в php

Поскольку мы можем определить шаблоны циклов в C ++, чтобы сделать кодирование короче:

#define fo(a,b,c) for( a = ( b ); a < ( c ); ++ a ) 

Есть ли способ сделать то же самое в PHP?

Отказ от ответственности : Ну, это не совсем макропроцессор, но из-за «динамического» характера PHP препроцессоры не нужны / не используются. Вместо этого вы можете переносить функции в другие функции, как в приведенном ниже примере.

Да, вы можете сделать это, создав свою собственную функцию, которая передается также обратным вызовом. Вот пример:

 // FO function function fo($b, $c, $callback) { for ($a = $b; $a < $c; ++$a) { $callback($a); } } // example of usage fo(2,10, function($a){ echo '['.$a.']'; }); 

Вышеупомянутый код работает в PHP 5.3 и выводит следующее:

 [2][3][4][5][6][7][8][9] 

К счастью, нет. Есть много ужасных вещей, которые вы можете сделать, чтобы сделать нечитаемый PHP, но это не один из них.

По умолчанию PHP не использует препроцессор. Будучи динамичным языком, для него не существует шага сборки, который должен выполняться как часть. Существуют предварительные процессоры сторонних производителей, которые можно использовать как CCPP , и, конечно же, вы можете писать свои собственные, но они, вероятно, значительно изменят ваши рабочие процессы.

Интересным препроцессором для PHP был PiHiPi, который пытался добавить полезные функции на язык, такой как JSON, как синтаксис массива, вместо необходимости писать array() каждый раз. К сожалению, автор потянул его.

Как насчет чего-то вроде:

 function my_macro($a, $b, $c) { $args = func_get_args(); array_shift($args); array_shift($args); array_shift($args); return call_user_func_array("something_horrifically_long_involving_{$a}_{$b}_and_{$c}", $args); } 

CCPP, по- видимому, является наиболее доступной:

 #define macroFunction(op1,op2,op3) ((int)op1/((int)op2+(int)op3)) #define hash_hash # ## # #define showCExamples 1 #if showCExamples //Reference: http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation #define MYCASE(item,id) \ case id: \ item##_##id = id;\ break switch(x) { MYCASE(widget,23); }