手记

PHP 模板原理以及相关代码展示

mini类
class mini {

public $template_dir = ''; // 模板文件存放的位置
public $compile_dir = ''; // 模板文件编译后存放的位置

public $array = array ();
public function assign($key, $value) {
    $this->array [$key] = $value;
}

/*
 * 调动compile来编译模板,并自动引入;
 */
public function display($template) {
    $comp = $this->compile ( $template );
    include ($comp);
}

/*
 * 传一个参数,读取那个html模板 流程:把模板读取过来,编译成php
 */
public function compile($template) {
    // $template是一个html文件
    $temp = $this->template_dir . '/' . $template;
    $source = file_get_contents ( $temp );
    // 再把编译后的内容保存成.php文件
    $comp = $this->compile_dir . '/' . $template . '.php';
    // 判断模板是否已经存在,或者修改;
    if (file_exists ( $comp ) && filemtime ( $temp ) < filemtime ( $comp )) {
        return $comp;
    }
    $source = str_replace ( '{$', '<?php echo $this->array[\'', $source );
    $source = str_replace ( '}', '\'];?>', $source );
    // echo $source;
    file_put_contents ( $comp, $source );
    return $comp;
}

}

19人推荐
随时随地看视频
慕课网APP

热门评论

$source = str_replace ( '{$', '<?php echo $this->array[\'', $source ); 
$source = str_replace ( '}', '\'];?>', $source );

上面两句代码不好,随便写个"}"也被替换了。建议改为:

$source = preg_replace('/\{\$(\w+)\}/', '<?php echo $this->array["\1"];?>', $source);


$source = str_replace ( '{$', '<?php echo $this->array[\'', $source ); 
$source = str_replace ( '}', '\'];?>', $source );

上面两句代码不好,随便写个"}"也被替换了。建议改为:

$source = preg_replace('/\{\$(\w+)\}/', '<?php echo $this->array["\1"];?>', $source);


这个很高大上高大上高大上

查看全部评论