只是一个简单的问题。我有一个存储在函数中的联系表单,因为它更容易在我想要的页面上调用它。
现在为了扩展可用性,我想使用str_replace搜索{contactform}。
示例:
function contactform(){
// bunch of inputs
}
$wysiwyg = str_replace('{contactform}', contactform(), $wysiwyg);
基本上,如果找到{contactform}。将其替换为contactform的输出。
现在我知道我可以在替换之前运行该函数并将其输出存储在变量中,然后用同一个变量替换它。但我很想知道是否有比我想象的更好的方法。
由于
答案 0 :(得分:2)
要回答您的问题,可以使用PCRE和preg_replace_callback,然后修改您的contactform()
函数或创建一个接受匹配的包装器。
我认为你运行该函数一次并将其存储在变量中的想法更有意义。
答案 1 :(得分:1)
你的方法很好,如果你打算不止一次使用contactform()的内容,我会把它设置为$ var。
在运行str_replace函数之前,使用http://php.net/strpos检查{contact_form}是否存在可能会有所收获。
你可以尝试两种方式,如果你的服务器支持它,那么基准测试:
<?php echo 'Memory Usage: '. (!function_exists('memory_get_usage') ? '0' : round(memory_get_usage()/1024/1024, 2)) .'MB'; ?>
答案 2 :(得分:0)
你可能想看看php call_user_func()
更多信息http://php.net/call_user_func
$wysiwyg = 'Some string and {contactform}';
$find = '{contactform}';
strpos($wysiwyg, $find) ? call_user_func($find) : '';
答案 3 :(得分:0)
是的,有:自己写一个。 (除非已经有一个,这在PHP中总是很难确定;请参阅我的下一点。)
啊,它是:preg_replace_callback()
。当然,它是三个正则表达式库中的一个,因此不会进行简单的字符串操作。
无论如何,我的观点是:不要遵循PHP的[非]设计指南。使用回调编写自己的多字节安全字符串替换函数,不要使用call_user_func()
。