Rumah > pembangunan bahagian belakang > tutorial php > 自己默写smarty模板引擎,不解析php呢(求高手帮忙)

自己默写smarty模板引擎,不解析php呢(求高手帮忙)

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-06-23 13:43:39
asal
989 orang telah melayarinya

  $realcontent  =$this->filecontent;


$mode = '/\{\$([\w]+)\}/';
if(preg_match($mode,$realcontent)){

var_dump($assign_vars);

$realcontent=preg_replace($mode,"assign_vars['$1'] ?>",$realcontent); ;//替换成index.php文件中注入的变量


}
return $realcontent;

 
 }  

运行后代码为
assign_vars['content'] ?>

作者:assign_vars['name'] ?>assign_vars['var'] ?>


回复讨论(解决方案)

<?php$realcontent = file_get_contents("template_test.html");$tpl_string = <<< TEMPLEATE<html>    <head>        <title>{\$title}</title>        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    </head>    <body>        <div>作者:{\$name}</div>        <div>国家:{\$china}</div>        <div>省份:{\$provice}</div>        <div>城市:{\$city}</div>    </body></html>TEMPLEATE;$mode = '/\{\$(\w+)\}/';$assign_arr = array();function assign($name, $value) {        global $assign_arr;    $assign_arr[$name] = empty($value) ? '' : $value;        return $assign_arr;}function replace_content($match) {    global $assign_arr;    if (!empty($match)) {                return array_key_exists($match[1], $assign_arr) ? $assign_arr[$match[1]] : '';    }}assign("title", "I love you");assign("name", "iseagold");assign("china", "中国");assign("provice", "广东省");assign("city", "深圳市");assign("no", "页面不存在,未取出的变量");echo preg_replace_callback($mode, "replace_content", $tpl_string);//===================================简单的类版本==========================================================class Template {    public $assign_items = array();    public $content;        function __construct($file) {        $this->content = file_get_contents($file);    }    function assign($name, $value) {        $this->assign_items[$name] = empty($value) ? "" : $value;    }    function replace() {        $arr_assign_items = array();        $content = '';        $content = $this->content;        $arr_assign_items = $this->assign_items;                $pattern = '/\{\$(\w+)\}/';        $this->content = preg_replace_callback($pattern, function($match) use($arr_assign_items) {            if (!empty($match)) {                                                      if (array_key_exists($match[1], $arr_assign_items)) {                    echo $arr_assign_items[$match[1]];                    return $arr_assign_items[$match[1]];                }            }        }, $content);    }    function display() {        echo $this->content;    }}$template = new Template("template_test.html");$template->assign("title", "I love you");$template->assign("name", "iseagold");$template->assign("china", "中国");$template->assign("provice", "广东省");$template->assign("city", "深圳市");$template->assign("no", "页面不存在,未取出的变量");$template->replace();$template->display();?>
Salin selepas log masuk

smarty 3 以后默认不支持PHP 混写了 换成 smarty 2 就可以了

笔误了, 是模仿写 ,不是默写...

笔误了, 是模仿写 ,不是默写...


把那个编译类看懂,全是正则

你只产生了 php 代码,并没有执行他

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan