簡體   English   中英

如何在 php 中創建循環模板

[英]How to create loop templates in php

因為我們可以在 C++ 中定義循環模板,以縮短編碼:

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

有沒有辦法在 PHP 中做同樣的事情?

謝天謝地沒有。 您可以做很多可怕的事情來使 PHP 變得不可讀,但這不是其中之一。

PHP 默認不使用預處理器。 作為一種動態語言,它沒有作為其一部分運行的構建步驟。 您可以使用第三方預處理器,例如CCPP ,當然您也可以編寫自己的預處理器,但它們可能會大大改變您的工作流程。

PHP 的一個有趣的預處理器是PiHiPi ,它試圖將有用的功能添加到像 JSON 這樣的語言中,就像數組語法一樣,而不是每次都需要編寫array() 可惜作者已經撤了。

免責聲明:嗯,這不完全是預處理器宏,但由於 PHP 的“動態”特性,不需要/使用預處理器。 但是,您可以將函數包裝在其他函數中,如下例所示。

是的,您可以通過創建自己的 function 來實現這一點,該 function 也被傳遞一個回調。 這是示例:

// 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]

怎么樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM