• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP实现模板引擎功能

php 搞代码 3年前 (2022-01-22) 23次浏览 已收录 0个评论

这篇文章主要介绍了PHP实现简单的模板引擎功能,结合实例形式详细分析了PHP实现模板引擎功能的模版类、编译类、控制器类及模板文件等实现方法与相关操作技巧,需要的朋友可以参考下

具体如下:

php web开发中广泛采取mvc的设计模式,controller传递给view层的数据,必须通过模板引擎才能解析出来。实现一个简单的仅仅包含if,foreach标签,解析$foo变量的模板引擎。

编写template模板类和compiler编译类。代码如下:

<?phpnamespace foo\base;use foo\base\Object;use foo\base\Compiler;/*** */class Template extends Object{  private $_config = [    'suffix' => '.php',//文件后缀名    'templateDir' => '../views/',//模板所在文件夹    'compileDir' => '../runtime/cache/views/',//编译后存放的目录    'suffixCompile' => '.php',//编译后文件后缀    'isReCacheHtml' => false,//是否需要重新编译成静态html文件    'isSupportPhp' => true,//是否支持php的语法    'cacheTime' => 0,//缓存时间,单位秒  ];  private $_file;//带编译模板文件  private $_valueMap = [];//键值对  private $_compiler;//编译器  public function __construct($compiler, $config = [])  {    $this->_compiler = $compiler;    $this->_config = array_merge($this->_config, $config);  }  /**   * [assign 存储控制器分配的键值]   * @param [type] $values [键值对集合]   * @return [type]     [description]   */  public function assign($values)  {    if (is_array($values)) {      $this->_valueMap = $values;    } else {      throw new \Exception('控制器分配给视图的值必须为数组!');    }    return $this;  }  /**   * [show 展现视图]   * @param [type] $file [带编译缓存的文件]   * @return [type]    [description]   */  public function show($file)  {    $this->_file = $file;    if (!is_file($this->path())) {      throw new \Exception('模板文件'. $file . '不存在!');    }    $compileFile = $this->_config['compileDir'] . md5($file) . $this->_config['suffixCompile'];    $cacheFile = $this->_config['compileDir'] . md5($file) . '.html';    //编译后文件不存在或者缓存时间已到期,重新编译,重新生成html静态缓存    if (!is_file($compileFile) || $this->isRecompile($compileFile)) {      $this->_compiler->compile($this->path(), $compileFile, $this->_valueMap);      $this->_config['isReCacheHtml'] = true;      if ($this->isSupportPhp()) {        extract($this->_valueMap, EXTR_OVERWRITE);//从数组中将变量导入到当前的符号表      }    }    if ($this->isReCacheHtml()) {      ob_start();      ob_clean();      include($compileFile);      file_put_contents($cacheFile, ob_get_contents());      ob_end_flush();    } else {      readfile($cacheFile);    }  }  /**   * [isRecompile 根据缓存时间判断是否需要重新编译]   * @pa<a>本2文来*源gao($daima.com搞@代@#码(网</a><strong>搞gaodaima代码</strong>ram [type] $compileFile [编译后的文件]   * @return boolean       [description]   */  private function isRecompile($compileFile)  {    return time() - filemtime($compileFile) > $this->_config['cacheTime'];  }  /**   * [isReCacheHtml 是否需要重新缓存静态html文件]   * @return boolean [description]   */  private function isReCacheHtml()  {    return $this->_config['isReCacheHtml'];  }  /**   * [isSupportPhp 是否支持php语法]   * @return boolean [description]   */  private function isSupportPhp()  {    return $this->_config['isSupportPhp'];  }  /**   * [path 获得模板文件路径]   * @return [type] [description]   */  private function path()  {    return $this->_config['templateDir'] . $this->_file . $this->_config['suffix'];  }}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP实现模板引擎功能
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址