将正确的php代码放在eval()中 - 字符串

时间:2013-06-11 09:26:49

标签: php string function

我正在开发一个Wordpress项目,我需要动态创建一个函数(取决于用于页面或帖子的模板类型),以检索相关每个页面的注释。

所以,假设我在Wordpress中有ID为100,110,120,130,140,​​150的页面,其中3个使用名为“blog”的模板(例如:100,130和150)。

因此,为了使用AJAX从这3个页面中检索注释,我需要为每个页面创建一个函数:

function GetComments100() { #### }
function GetComments130() { #### }
function GetComments150() { #### }

这是我需要为每个页面单独创建的功能代码(它位于上面的功能括号之间(而不是####):

$defaults = array( 'order' => 'DESC', 'post_id' => $functionID, 'post_type' => 'page', 'count' => false ); 
$comments = get_comments($defaults);
foreach($comments as $comment) :
echo "<div class='table-row' style='margin-bottom:1px'><div class='table-cell-1' style='width:110px;'>".$comment->comment_author.":</div><div class='table-cell-2'style='width:870px;'>".$comment->comment_content."  <em><a>".$comment->comment_date." ... ".get_the_title($comment->comment_post_ID)." (".$comment->comment_post_ID.")</a></em></div></div>";
endforeach;
die($results);

为了获取页面,我使用了一个循环函数,它给出了页面ID作为变量(在我的例子中是它的$ functionID(也包含在我上面函数的数组中))。

我已经设法使用以下代码行动态创建函数(我知道“eval”不是一个好选择,但我没有找到任何其他解决方案):

$string = 'function ' . $functionName . "() { 
####
}";
eval($string);

现在代替####我需要集成实际的函数代码,以“$ defaults = array(...”开头,但显然它必须完全转换为字符串 - 这就是我正在努力的

任何帮助将不胜感激(再次,我知道使用“eval”并不好,但到目前为止我没有找到任何其他解决方案)

2 个答案:

答案 0 :(得分:0)

您是否尝试过将nowdoc用于功能体?如果你只需要扩展$ functionName,你可以尝试这样的事情:

      $string="function {$functionName}(){".<<<'END'
$defaults = array( 'order' => 'DESC', 'post_id' => $functionID, 'post_type' => 'page', 'count' => false ); 
$comments = get_comments($defaults);
foreach($comments as $comment) :
echo "<div class='table-row' style='margin-bottom:1px'><div class='table-cell-1' style='width:110px;'>".$comment->comment_author.":</div><div class='table-cell-2'style='width:870px;'>".$comment->comment_content."  <em><a>".$comment->comment_date." ... ".get_the_title($comment->comment_post_ID)." (".$comment->comment_post_ID.")</a></em></div></div>";
endforeach;
die($results);
}
END;

eval($string);

答案 1 :(得分:0)

我不明白为什么你不为每个模板使用一个函数,其参数如下:

public function getBlogComments($id){
    //...
}

或检查使用过的模板的一个函数

public function getComments($id){
    // get Template of $id
    //...
}