我正在制作一个简单的PHP模板系统,但是我得到了一个我无法解决的错误,问题是布局加载很好但很多次,无法解决如何解决,这里是我的代码
Class Template {
private $var = array();
public function assign($key, $value) {
$this->vars[$key] = $value;
}
public function render($template_name) {
$path = $template_name.'.tpl';
if (file_exists($path)) {
$content = file_get_contents($path);
foreach($this->vars as $display) {
$newcontent = str_replace(array_keys($this->vars, $display), $display, $content);
echo $newcontent;
}
} else {
exit('<h1>Load error</h1>');
}
}
}
输出
标题是:欢迎使用我的模板系统
[学分]
的学分标题是:[标题]
对Alvaritos积分的信贷
你可以看到这是错误的,但不知道如何解决它。
答案 0 :(得分:2)
您最好使用strtr
:
$content = file_get_contents($path);
$new = strtr($content, $this->vars);
print $new;
str_replace()
按照定义键的顺序进行替换。如果您有array('a' => 1, 'aa' => 2)
之类的变量和aa
之类的字符串,那么您将获得11
而不是2
。 <{1}}将在替换之前按长度排序密钥(最高的第一个),这样就不会发生。
答案 1 :(得分:0)
使用此:
foreach($this->vars as $key => $value)
$content = str_replace($key,$value,$content);
echo $content;