这是否接近可以接受的东西?我需要为每个HTML标记创建一个函数,并且需要将它们定义为以后在Heredoc字符串中使用。到目前为止,这是我的代码。
<?php
$tags = array (h1, h2, h3, b, i);
foreach ($tags as $key => $value)
{
eval ('function '.$value.' ($str) { return "<'.$value.'>$str</'.$value.'>"; }');
}
这基本上处理了关于heredoc中的函数的Heredoc问题。一个简单的例子:
<<<example
<h1>This is ordinary HTML</h1>
{$h1('This is HTML via. PHP')}
example;
我用心做了所有代码,所以如果它们包含任何错误,请不要惊讶。我还没有执行eval-function,但它看起来还不错。无论如何,我的问题是:这是好的,还是更好的做法:
function h1 ($str) { return ...; }
function h2 ($str) { return ...; }
function h3 ($str) { return ...; }
function b ($str) { return ...; }
function i ($str) { return ...; }
等等..?
答案 0 :(得分:5)
您可以使用PHP提供的create_function但是......由于代码很简单,为什么不使用一个函数来统治它们呢?
function createTag($tag, $text) {
return "<{$tag}>{$text}</{$tag}>";
}
应该做你想做的事。
作为一个想法,您可能想要查看PHP DOM,因为这可能是要走的路,但是需要一些时间来学习并习惯使用它。
答案 1 :(得分:2)
如果你能够更精细地生活:
<h1>This is ordinary HTML</h1>
{$h->h1("This is HTML via PHP.")}
然后定义单个就足够了:
class html {
function __call($name, $args) {
return "<$name>$args[0]</$name>";
}
}
$h = new html();
比定义函数的多个eval往返更快。
答案 2 :(得分:1)
如果你打算使用丑陋的黑客,我宁愿这样做:
function create_html($tag, $val) {
return "<{$tag}>{$val}</{$tag}>";
}
$html = 'create_html';
<<<example
<h1>Test</h1>
{$html('h2','Another test')}
example;
答案 3 :(得分:0)
如果您使用的是PHP 5.3,则可以使用闭包。 远优于create_function
。避免使用eval()
。