繁体   English   中英

将正确的PHP代码放入eval()字符串中

[英]Putting correct php-code within eval()-string

我正在一个Wordpress项目上工作,在这里我需要动态创建一个函数(取决于用于页面或帖子的模板类型),该函数可以检索每个有问题的页面的注释。

因此,假设我在Wordpress中有ID为100、110、120、130、140、150的页面,而这3个页面中的页面使用的是称为“博客”的模板(例如: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”不是很好,但到目前为止,我没有找到其他解决方案)

您是否尝试过将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);

我不明白为什么您不为每个模板使用一个带有如下参数的函数:

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

或一项功能,用于检查使用的模板

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM