如何在php中创建循环模板

时间:2011-05-28 16:59:51

标签: php c++

我们可以在C ++中定义循环模板,以缩短编码:

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

有没有办法在PHP中做同样的事情?

4 个答案:

答案 0 :(得分:12)

谢天谢地没有。你可以做很多可怕的事情来制作不可读的PHP,但这不是其中之一。

默认情况下,PHP不使用预处理器。作为一种动态语言,没有一个构建步骤可以作为其中的一部分运行。您可以使用第三方预处理器,例如CCPP,当然您可以编写自己的预处理器,但它们可能会大大改变您的工作流程。

PHP的一个有趣的预处理器是PiHiPi,它尝试向JSON这样的语言添加有用的功能,如数组语法,而不是每次都需要编写array()。不幸的是,作者已将其删除了。

答案 1 :(得分:5)

免责声明:嗯,这不完全是预处理器宏,但由于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]

答案 2 :(得分:1)

如下:

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);
}

答案 3 :(得分:0)

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);
}