首頁 >後端開發 >php教程 >一個簡單的模板引擎類,此類僅作研究並不完善,希望有朋友一起參與學習研究

一個簡單的模板引擎類,此類僅作研究並不完善,希望有朋友一起參與學習研究

WBOY
WBOY原創
2016-07-25 09:01:19974瀏覽
第一次在這裡帖碼,此份代碼主要是PHP模板引擎技術研究,目前只有編譯版本,希望各位多多提供意見和優化技巧
三個文件組成,不知道如何以文件形式,只能複製了,抱歉!
index.php是設定文件,大夥看看就明白
index.html一些使用的範例
Templates.class.php基底類別
晚點發布下有快取的完善版本,但希望沒有在寫快取一些,有朋友或是高手指點下,這個模板引擎只要處理編譯和快取即可,其餘考慮暫時不考慮,當然正規替換模式還要增加f,w之類。 。 。
希望有朋友可以研究研究本人Q:
76376931

Copy_3_of_Templates.class.php 檔案是已經增加快取方式的,再次刷新頁面不會產生緩存,未考慮專案中某些頁面是否要緩存,以後用該類別在逐步添加,希望有朋友可以一起交流!
  1. header('Content-Type:text/html;charset=utf-8');
  2. define('ROOT_HOST',dirname(__FILE__) );
  3. define('HTML_DIR',ROOT_HOST.'/moban/');
  4. define('COMPILED_DIR',ROOT_HOST.'/data/compiled/');
  5. define('CACHE_DIR',ROOT_HOST .'/data/cache/');
  6. //是否開啟緩衝區
  7. define('NEW_CACHE', false);
  8. //判斷是否開啟緩衝區
  9. NEW_CACHE ? ob_start() : null;
  10. //引入模板類別
  11. require ROOT_HOST.'/lib/Templates.class.php';
  12. $_moban = new Templates();
  13. $array = array(a=>'你好呀',b=>'我不是很好,但我很想你',c=>'你都在家裡了,怎麼還想我呀?');
  14. $ xcvu = '你好啊,這是一個XCVU';
  15. $zmq = "hi";
  16. $title = "這是一個模板引擎自訂方法!";
  17. $ling = "因為正在修改一個「函數」????????????????";
  18. $_moban->assign('ling', $ling);
  19. $_moban-> assign('title',$title);
  20. $_moban->assign('zmq', $zmq);
  21. $_moban->assign('xcvu', $xcvu);
  22. $_moban- >assign('abc',5>4);
  23. $_moban->assign('array', $array);
  24. $_moban->display('index.html');
  25. ?>
複製程式碼
  1. BBBasd不知道說點什麼好,又想說點什麼


  2. 1號

  3. 2號


  4. ........
  • 複製程式碼
    1. /* 關於:Richard.z
    2. * 網站:http://www.zmq.cc
    3. * 電子郵件:code@zmq .cc
    4. * 日期:2013/01/02/17:30
    5. * */
    6. 類別範本{
    7. private $_CaChe;
    8. private $_Compiled;
    9. primlfate $
    10. private $_FileVar;
    11. private $_KeyArr = array();
    12. public function __construct(){
    13. if(!is_dir(HTML_DIR) ||PI_DIR) || is_dir(CACHE_DIR)){
    14. exit('您的目錄不存在!');
    15. }
    16. }
    17. public function allocate($_var, $_value){
    18. if (isset($_var) && !empty($_var)){
    19. $this->_KeyArr[$_var] = $_value;
    20. }else{
    21. exit('請設定您的值!' );
    22. }
    23. }
    24. public function display($_File){
    25. //設定模板的變數
    26. $this->_HtmlFile = HTML_DIR.$_File
    27. //設定編譯
    28. $this->_Compiled = COMPILED_DIR.md5($_File).$_File.'.php';
    29. //設定快取
    30. $this->_CaChe = CACHE_DIR. md5($ _File).$_File.'.html';
    31. //判斷模板是否存在
    32. if(!file_exists($this->_HtmlFile)){
    33. exit('模板檔案不存在');
    34. }
    35. //賦值與判斷讀取
    36. if(!$this->_FileVar = file_get_contents($this->_HtmlFile)){
    37. exit('模板檔案讀取錯誤!') ;
    38. }
    39. //如果編輯編譯檔案日期
    40. date HtmlFile
    41. if(!file_exists($this->_Compiled) || filemtime($this->_Compiled) _HtmlFile)){
    42. $this->Set_Comilled ();
    43. }
    44. //包含已編譯
    45. include $this->_Compiled;
    46. }
    47. //公用函數
    48. public function Set_Comilled(){
    49. $this->SetArr();
    50. $this->SetInclude();
    51. if(!file_put_contents($this->__iled, $this-Compiled, $this-Compiled, $this-Compiled >_FileVar)){
    52. exit('編譯檔產生錯誤! ');
    53. }
    54. }
    55. //arr
    56. private function SetArr(){
    57. $_preaa = array(
    58. '//',
    59. '//',
    60. '// ',
    61. '//',
    62. '/ /',
    63. '//',
    64. '/ /',
    65. '//');
    66. $_prebb = array(
    67. '_KeyArr["$1 "];?>',
    68. '_KeyArr["$1"]) {?>',
    69. '',
    70. ' php } else { ?>',
    71. '_KeyArr["$1"] as $$2=>$$3) { ?>; ',
    72. '',
    73. '',
    74. '' );
    75. $this->_FileVar = preg_replace($_preaa, $ _prebb, $this->_FileVar);
    76. if(preg_match($_preaa[0], $this->_FileVar)){
    77. $this->_FileVar = $this->SetArr($this->_FileVar );
    78. }
    79. }
    80. //包含
    81. 私有函數SetInclude() {
    82. $_preFile = '//';
    83. if(preg_match($_preFile, $this ->_FileVar,$_File)){
    84. if(!file_exists($_File[1]) || empty($_File)){
    85. exit('你的包含檔案錯誤!');
    86. }
    87. $this->_FileVar = preg_replace($_preFile, "", $this->_FileVar);
    88. }
    89. }
    90. }
    ?>
    複製程式碼
    1. /* 關於:Richard.z
    2. * 網站:http://www.zmq.cc
    3. * 電子郵件:code@zmq .cc
    4. * 日期:2013/01/02/17:30 || 2013/01/14/21:35
    5. * */
    6. 類別範本{
    7. private $_CaChe;
    8. private $_Compiled;
    9. private $_HtmlFile;
    10. private $_FileVar;
    11. private $_KeyArr = array();
    12. public f function __cone_if if(isset($_var) && ! empty($_var)){
    13. $this->_KeyArr[$_var] = $_value;
    14. }else{
    15. exit('請設定您的值!');
    16. }
    17. }
    18. public function display($_File){
    19. //設定模板的變數
    20. $this- >_HtmlFile = HTML_DIR.$_File;
    21. //設定編譯
    22. $this->_Compiled = COMPILED_DIR.md5($_File).$_File.'.php';
    23. //設定快取
    24. $this->_CaChe = CACHE_DIR.md5($_File).$_File .'.html';
    25. //判斷模板是否存在
    26. if(!file_exists($this->_HtmlFile)){
    27. exit('範本檔案不存在');
    28. }
    29. // 賦值與判斷讀取
    30. if(!$this->_FileVar = file_get_contents($this->_HtmlFile)){
    31. exit ('範本檔案讀取錯誤!');
    32. }
    33. //如果編輯編譯檔案日期 if(!file_exists($this->_Compiled) || filemtime($this- >_Compiled) _HtmlFile)){
    34. $this->Set_Comilled ();
    35. }
    36. //包含已編譯
    37. include $this->_Compiled;
    38. $this->SetCaChe();
    39. }
    40. //如果要再產生則設定快取檔案
    41. private function SetCaChe(){
    42. if(!file_exists($this->_CaChe ) || filemtime($this->_CaChe) _Compiled)){
    43. if(NEW_CACHE){
    44. file_put_contents($this->_CaChe, ob_get_contents()); ();
    45. include $this->_CaChe ;
    46. }
    47. }
    48. }
    49. //公共函數
    50. public function Set_Comilled(){
    51. $🎜> public function Set_Comilled(){
    52. $this-this- >SetArr();
    53. $this- >SetIninclude();
    54. if(!file_put_contents($this->_Compiled, $this->_FileVar)){
    55. exit('編譯檔案產生錯誤! ');
    56. }
    57. }
    58. //arr
    59. 私有函式SetArr(){
    60. $_preaa = array(
    61. '//' ,
    62. '//',
    63. '// ',
    64. '//',
    65. '//',
    66. '//',
    67. '/ /',
    68. '//');
    69. $_prebb = array(
    70. '_KeyArr["$1 "];?>',
    71. '_KeyArr["$1"]) {?>',
    72. '< ;?php } ?>',
    73. '',
    74. '_KeyArr["$1"] as $$2= >$$3) { ?>',
    75. '',
    76. '',
    77. '');
    78. $this->_FileVar = preg_replace($_preaa, $ _prebb, $this->_FileVar);
    79. if(preg_match($_preaa[0], $this->_FileVar)){
    80. $this->_FileVar = $this->SetArr($this->_FileVar );
    81. }
    82. }
    83. //包含
    84. 私有函數SetInclude(){
    85. $_preFile = '//';
    86. if(preg_match($_preFile, $this->_FileVar,$_File)){
    87. if(!file_exists($_File[1]) ||空( $_File)){
    88. exit('你的包含檔案錯誤!');
    89. }
    90. $this->_FileVar = preg_replace($_preFile, "", $this->_FileVar);
    91. }
    92. }
    93. }
    94. ?>
    95. 複製程式碼
    複製程式碼
    複製程式碼
    複製程式碼
    複製程式碼

    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn