PHP定义函数而不执行

时间:2016-05-23 15:19:14

标签: php function

我目前正在为自定义CMS开发广告模块,并使用模板标签允许客户通过WSYWIG页面内容编辑器将广告添加到他们的页面中。

EG。 {=advert_1}

在前端,这将通过正则表达式找到,然后转换为一个函数,它将查找数据库以选择和显示广告

Template_tags.php

while ($advertRow = $advertResult->fetch_assoc()) {
    $advertGroupID = $advertRow['grpID'];
    $advert = "advert_";

    ${$advert . $advertGroupID} = showAdvert($advertGroupID);
}

这意味着{=advert_1}将转换为showAdvert(1)

我遇到的问题是,showAdvert功能将针对所有广告运行,无论它是否出现在页面上,然后添加到"视图",即使广告可能无法显示。

我想要的是在不执行它的情况下定义函数,所以当它出现在页面内容中时,才会执行该函数。

1 个答案:

答案 0 :(得分:1)

使用函数表达式创建闭包。

${$advert . $advertGroupID} = function() use($advertGroupID) {
    showAdvert($advertGroupID);
};

要调用该函数,需要在其后面添加括号:

$name = 'advert_1';
echo $$name();

preg_replace_callback

一起使用
preg_replace_callback("/\{=([^\{]{1,100}?)\}/", function($match) {
    return $match[1]();
}, $pageContent);