怎么在PHP中定义模版引擎
创始人
2024-12-07 00:43:16
0次

php的框架有哪些

php的框架:1、Laravel,Laravel是一款免费并且开源的PHP应用框架。2、Phalcon,Phalcon是运行速度最快的一个PHP框架。3、Symfony,Symfony是一款为Web项目准备的PHP框架。4、Yii,Yii是一款快速、安全和专业的PHP框架。5、CodeIgniter,CodeIgniter是一款非常敏捷的开源PHP框架。6、CakePHP,CakePHP是一款老牌的PHP框架。7.Kohana,Kohana是一款敏捷但是功能强大的PHP框架。

Compline.class.php

template = $template;
   $this->comfile = $compileFile;
   $this->content = file_get_contents($template);
   if($config['php_turn'] === false)
   {
     $this->T_P[] = "/<\?(=|php|)(.+?)\?>/is";
     $this->T_R[] = "<? \\1\\2? >";
   }
   //{$var}
   $this->T_P[] = "/\{\\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/";
   //{foreach $b}或者{loop $b}
   $this->T_P[] = "/\{(loop|foreach) \\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/i";
   //{[K|V]}
   $this->T_P[] = "/\{([K|V])\}/";
   //{/foreach}或者{\loop}或者{\if}
   $this->T_P[] = "/\{\/(loop|foreach|if)}/i";
   //{if (condition)}
   $this->T_P[] = "/\{if (.* ?)\}/i";
   //{(else if | elseif)}
   $this->T_P[] = "/\{(else if|elseif) (.* ?)\}/i";
   //{else}
   $this->T_P[] = "/\{else\}/i";
   //{#...# 或者 *...#,注释}
   $this->T_P[] = "/\{(\#|\*)(.* ?)(\#|\*)\}/";
   $this->T_R[] = "value['\\1']; ?>";
   $this->T_R[] = "value['\\2'] as \$K => \$V) { ?>";
   $this->T_R[] = "";
   $this->T_R[] = "";
   $this->T_R[] = "";
   $this->T_R[] = "";
   $this->T_R[] = "";
   $this->T_R[] = "";
  }
  public function compile()
  {
   $this->c_all();
   $this->c_staticFile();
   file_put_contents($this->comfile, $this->content);
  }
  public function c_all()
  {
   $this->content = preg_replace($this->T_P, $this->T_R, $this->content);
  }
  /**
  * 加入对JavaScript文件的解析
  * @return [type] [description]
  */
  public function c_staticFile()
  {
   $this->content = preg_replace('/\{\!(.* ?)\!\}/', '', $this->content);
  }
  public function __set($name, $value)
  {
   $this->$name = $value;
  }
  public function __get($name)
  {
   if(isset($this->$name))
   {
     return $this->$name;
   }
   else
   {
     return null;
   }
  }
}

Template.class.php

 '.tpl',  //模板的后缀
   'templateDir' => 'template/', //模板所在的文件夹
   'compileDir'  => 'cache/',  //编译后存放的目录
   'cache_html'  => true,   //是否需要编译成静态的html文件
   'suffix_cache' => '.html',  //设置编译文件的后缀
   'cache_time'  => 7200,   //设置多长时间自动更新
   'php_turn'  => true,   //设置是否支持php原生代码
   'debug'     => false,
   );
  public $file;         //模板文件名,不带路径
  public $debug = array();     //调试信息
  private $value = array();    //值栈
  private $compileTool;      //编译器
  private $controlData = array();
  static private $instance = null;  //模板类对象
  public function __construct($arrayConfig = array())
  {
   $this->debug['begin'] = microtime(true);
   $this->arrayConfig = array_merge($this->arrayConfig, $arrayConfig);
   $this->getPath();
   if(!is_dir($this->arrayConfig['templateDir']))
   {
     exit("template dir isn't found!");
   }
   if(!is_dir($this->arrayConfig['compileDir']))
   {
     if(strtoupper(substr(PHP_OS,0,3)) === 'WIN')
     {
      mkdir($this->arrayConfig['compileDir']);
     }
     else
     {
      mkdir($this->arrayConfig['compileDir'], 0770, true);
     }
   }
   include('Compile.class.php');
  }
  public function getPath()
  {
   $this->arrayConfig['templateDir'] = strstr(realpath($this->arrayConfig['templateDir']), '\\', '/').'/';
   $this->arrayConfig['compileDir'] = strstr(realpath($this->arrayConfig['compileDir'])), '\\', '/').'/';
  }
  /**
  * 取得模板引擎的实例
  */
  public static function getInstance()
  {
   if(is_null(self::$instance))
   {
     self::$instance = new Template();
   }
   return self::$instance;
  }
  /**
  * 单独设置引擎参数
  * 也支持一次性设置多个参数
  */
  public function setConfig($key, $value = null)
  {
   if(is_array($key))
   {
     $this->arrayConfig = $key + $this->arrayConfig;
   }
   else
   {
     $this->arrayConfig[$key] = $value;
   }
  }
  /**
  * 获取当前模板引擎配置,仅供调试使用
  */
  public function getConfig($key = null)
  {
   if($key && array_key_exists($key, $this->arrayConfig))
   {
     return $this->arrayConfig[$key];
   }
   else
   {
     return $this->arrayConfig;
   }
  }
  /**
  * 注入单个变量
  */
  public function assign($key, $value)
  {
   $this->value[$key] = $value;
  }
  /**
  * 注入数组变量
  */
  public function assignArray($array)
  {
   if(is_array($array))
   {
     foreach ($array as $k => $v) {
      $this->value[$k] = $v;
     }
   }
  }
  /**
  * 获取模板的位置
  * @return [type] [description]
  */
  public function path()
  {
   return $this->arrayConfig['templateDir'].$this->file.$this->arrayConfig['suffix'];
  }
  /**
  * 判断配置文件是否要求缓存
  */
  public function needCache()
  {
   return $this->arrayConfig['cache_html'];
  }
  /**
  * 判断是否需要缓存
  */
  public function reCache($file)
  {
   $flag = false;
   $cacheFile = $this->arrayConfig['compileDir'].md5($file).$this->arrayConfig['suffix_cache'];
   if($this->arrayConfig['cache_html'] === true)
   {
     //需要缓存
     $timeFlag = (time() - @filemtime($cacheFile)) < $this->arrayConfig['cache_time'] ? true : false;
     if(is_file($cacheFile) && filesize($cacheFile) > 1 && $timeFlag)
     {
      //缓存存在且未过期
      $flag = true;
     }
     else
     {
      $flag = false;
     }
   }
   return $flag;
  }
  /**
  * 展示模板
  */
  public function show($file)
  {
   $this->file = $file;
   if(!is_file($this->path()))
   {
     exit('找不到对应的模板');
   }
   $compileFile = $this->arrayConfig['compileDir'].md5($file).'.php';
   $cacheFile = $this->arrayConfig['compileDir'].md5($file).$this->arrayConfig['suffix_cache'];
   if($this->reCache($file) === false)
   {
     //如果需要缓存
     $this->debug['cached'] = 'false';
     $this->compileTool = new Compile($this->path(), $compileFile, $this->arrayConfig);
     if($this->needCache())
     {
      ob_start();
     }
     extract($this->value, EXTR_OVERWRITE);
     if(!is_file($compileFile) || fileatime($compileFile) < filemtime($this->path()))
     {
      $this->compileTool->value = $this->value;
      $this->compileTool->compile();
      include $compileFile;
     }
     else
     {
      include $compileFile;
     }
     if($this->needCache())
     {
      $message = ob_get_contents();
      file_put_contents($cacheFile, $message);
     }
   }
   else
   {
     readfile($cacheFile);
     $this->debug['cached'] = 'true';
   }
   $this->debug['spend'] = microtime(true) - $this->debug['begin'];
   $this->debug['count'] = count($this->value);
   $this->debug_info();
  }
  public function debug_info()
  {
   if($this->arrayConfig['debug'] === true)
   {
     echo "
", '-------------------- debug_info--------------', "
";      echo '程序运行日期:', date("Y-m-d h:i:s"), "
";      echo '模板解析耗时:', $this->debug['spend'], '秒', "
";      echo '模板包含标签数目:', $this->debug['count'], "
";      echo '是否使用静态缓存:', $this->debug['cached'], "
";      echo '模板引擎实例参数:', var_dump($this->getConfig());    }   }   /**   * 清楚缓存的html文件   * @return [type] [description]   */   public function clean()   {    if($path === null)    {      $path = $this->arrayConfig['compileDir'];      $path = glob($path.'* '.$this->arrayConfig['suffix_cache']);    }    else    {      $path = $this->arrayConfig['compileDir'].md5($path).$this->arrayConfig['suffix_cache'];    }    foreach ((array)$path as $v) {      unlink($v);    }   } }

test.php

 true));
$tpl->assign('data', 'hello world');
$tpl->assign('person', 'htGod');
$tpl->assign('data1', 3);
$arr = array(1,2,3,4,'5',6);
$tpl->assign('b', $arr);
$tpl->show('member');

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...