ホームページ >バックエンド開発 >PHPチュートリアル >単純なテンプレート エンジンのクラスです。この種の研究は完璧ではありません。友人が学習や研究に参加できることを願っています。

単純なテンプレート エンジンのクラスです。この種の研究は完璧ではありません。友人が学習や研究に参加できることを願っています。

WBOY
WBOYオリジナル
2016-07-25 09:01:19973ブラウズ
ここにコードを投稿するのはこれが初めてです。このコードは主に PHP テンプレート エンジン テクノロジの研究用です。現在はコンパイルされたバージョンしかありません。さらに多くの意見や最適化のヒントを提供していただければ幸いです。
ファイルとしてフォーマットする方法がわからないので、コピーすることしかできません。
index.phpは設定ファイルです、見れば誰でも理解できます
index.html 使用例
Templates.class.php 基本クラス
キャッシュの完全なバージョンが後でリリースされる予定ですが、友人や専門家の指導により、このテンプレート エンジンはコンパイルとキャッシュ、その他の考慮事項を処理するだけで済みます。当面は考慮されません。もちろん、通常の置換モードにも f、w などを追加する必要があります。 。 。
友達が私の Q: を研究してくれることを願っています

Copy_3_of_Templates.class.php ファイルにキャッシュ メソッドが追加されました。プロジェクト内の一部のページをキャッシュする必要があるかどうかは考慮されていません。将来、友達が私に参加できることを願っています。
header('Content-Type:text/html;charset=utf-8');
  • define('ROOT_HOST',dirname(__FILE__));
  • define('HTML_DIR',ROOT_HOST. '/moban/');
  • define('COMPILED_DIR',ROOT_HOST.'/data/compiled/');
  • define('CACHE_DIR',ROOT_HOST.'/data/cache/');
  • // buffer
  • define('NEW_CACHE', false);
  • //バッファを開くかどうかを決定します
  • NEW_CACHE? ob_start(): null;
  • //テンプレート クラスを導入します
  • require ROOT_HOST.'/lib/Templates.class.php' ;
  • $_moban = new Templates();
  • $array = array(a=>'こんにちは',b=>'あまり上手ではありませんが、とても寂しいです',c=> 「みんなここにいるよ、家にいるのに、どうしてまだ私がいなくて寂しいの?」);
  • $xcvu = 'こんにちは、XCVU です';
  • $zmq = "こんにちは";
  • $title = "これは XCVU ですテンプレートエンジンのカスタマイズ方法!" ;
  • $ling = "「関数」が変更されているため???????????????";
  • $_moban->assign('ling' , $ling);
  • $ _moban->assign('title',$title);
  • $_moban->assign('zmq', $zmq);
  • $_moban->assign('xcvu', $ xcvu);
  • $_moban->assign('abc',5>4);
  • $_moban->assign('array', $array);
  • $_moban->display('index.html') ;
  • ?>
  • コードをコピー
    1. <!-- $title -->< ;/title></li> <li><style type="text/css"></li> <li>*{ margin:0; padding:0;}</li> <li>body{ color:#fff; .index {マージン:0 自動; 幅:960px; 背景:#fff; 高さ:50px; パディング:20px; カラー:#000; :none;}</li> <li>.index a:hover{ color:#F0F;}</li> <li></style></li> <li></head></li> <li><body></li> <li><div class="index"></li> <li> <スパンスタイル="color:#000;">BBBasd</span><span style="color:#000;">何を言えばいいのかわからない、でも言いたいことがある</span>< br /></li> <li> <a href="#"><!-- $ling --></a></li> <li> <br /></li> <li> <!-- $xcvu --> </li> <li> <br /></li> <li> <!-- if $abc --></li> <li> <P>No.1</P></li> <li> <!-- else --></li> <li> <P>いいえ。 2 </P></li> <li> <!-- /if --></li> <li> <br /></li> <li> <!-- ループ $array(k,v) --></li> <li> <!-- @ k -->........<!-- @v --><br/><li> <!-- /loop --><li> <!-- #This PHP コメントです --></li> <li></div></li> <li></body></li> <li></html></li> <li> <li> <li>コードをコピー</li> <li> </ol> <div class="blockcode"> <div id="code_zuF"><ol> <li><?php<li>/* about:Richard.z<li> * site:http://www.zmq.cc<li> * E_mail:code@zmq.cc<li> * date:2013/01/02/17: 30<li> * */<li>class Templates{<li> private $_CaChe;<li> private $_Compiled;<li> private $_HtmlFile;<li> private $_FileVar;<li> private $_KeyArr = array();<li> <li> public function __construct(){<li> if(! is_dir(HTML_DIR) || !is_dir(COMPILED_DIR) || !is_dir(CACHE_DIR)){<li> exit('ディレクトリが存在しません!');<li> }<li> }<li> <li> public function assign($_var, $_value){ <li> if(isset($_var) && !empty($_var)){<li> $this->_KeyArr[$_var] = $_value;<li> }else{<li> exit('値を設定してください!');<li> } <li> }<li> <li> public function display($_File){<li> //設置モジュールの量<li> $this->_HtmlFile = HTML_DIR.$_File;<li> //設置モジュール<li> $this->Compiled = COMPILED_DIR.md5($ _File).$_File.'.php';<li> //設置缓存<li> $this->_CaChe = CACHE_DIR.md5($_File).$_File.'.html';</li> <li> //模板の有無判断</li> <li> if( !file_exists($this->_HtmlFile)){</li> <li> exit('テンプレート ファイルが存在しません');</li> <li> }</li> <li> //赋值和判断读取</li> <li> if(!$this->_FileVar = file_get_contents($this- >_HtmlFile)){</li> <li> exit('テンプレート ファイルの読み取りエラー!');</li> <li> }</li> <li> //コンパイル済みファイルの日付を編集する場合 < date HtmlFile <li> if(!file_exists($this->_Compiled) || filemtime($this->_Compiled) < filemtime($this->_HtmlFile)){</li> <li> $this->Set_Comilled();</li> <li> }</li> <li> //コンパイル済みを含める</li> <li> include $this->_Compiled; </li> <li> }</li> <li> <li> //パブリック関数</li> <li>パブリック関数 Set_Comilled(){</li> <li> $this->SetArr();</li> <li> $this->SetInclude();</li> <li> if(!file_put_contents($this->>_Compiled, $this ->_FileVar)){</li> <li> exit('コンパイルされたファイルでエラーが発生しました!');</li> <li> }</li> <li> }</li> <li> //arr</li> <li> プライベート関数 SetArr(){</li> <li> $_preaa = array(</li> <li> '/<!--s+$ ([w]+)s+-->/',<li> '/<!--s+ifs+$([w]+)s+-->/',<li> '/<!--s+/ ifs+-->/',<li> '/<!--s+elses+-->/',<li> '/<!--s+loops+$([w]+)(([w]+ ),([w]+))s+-->/',<li> '/<!--s+/loops+-->/',<li> '/<!--s+@([w]+ )s+-->/',<li> '/<!--s+#(.*)s+-->/');<li> $_prebb = array(<li> '<?php echo $this-> _KeyArr["$1"];?>',</li> <li> '<?php if ($this->_KeyArr["$1"]) {?>',</li> <li> '<?php } ?>', </li> <li> '<?php } else { ?>',</li> <li> '<?php foreach ($this->_KeyArr["$1"] as $$2=>$$3) { ?>',</li> <li> ' <?php } ?>',</li> <li> '<?php echo $$1; ?>',</li> <li> '<?php /* $1 */ ?>');</li> <li> $this->_FileVar = preg_replace($_preaa, $_prebb, $this->_FileVar);</li> <li> if(preg_match($_preaa[0], $this->_FileVar)){</li> <li> $this->_FileVar = $this->SetArr ($this->_FileVar);</li> <li> }</li> <li> }</li> <li> <li> //Include</li> <li> プライベート関数 SetInclude(){</li> <li> $_preFile = '/<!--s+includes+file="([w.-]+ )"s+-->/';<li> if(preg_match($_preFile, $this->_FileVar,$_File)){</li> <li> if(!file_exists($_File[1]) || empty($_File)){</li> <li> exit('インクルード ファイル エラーです!');</li> <li> }</li> <li> $this->_FileVar = preg_replace($_preFile, "<?php include '$1'; ?>", $this->_FileVar);</li> <li> }</li> <li> }</li> <li> </li> <li>}</li> <li>?></li> </ol></div> <em onclick="copycode($('code_zuF'));">复制代</em> </div> <div class="blockcode"><div id="code_pmx"><ol> <li><?php<li>/* about:Richard.z<li> * site:http://www.zmq.cc<li> * E_mail:code@zmq.cc<li> * date:2013/01/02/17: 30 || 2013/01/14/21:35<li> * */<li>class Templates{<li> private $_CaChe;<li> private $_Compiled;<li> private $_HtmlFile;<li> private $_FileVar;<li> private $_KeyArr = array();<li> <li> public function __construct(){<li> if(!is_dir(HTML_DIR) || !is_dir(COMPILED_DIR) || !is_dir(CACHE_DIR)){<li> exit('ディレクトリが存在しません!');<li> }<li> }<li> <li> public function assign ($_var, $_value){<li> if(isset($_var) && !empty($_var)){<li> $this->_KeyArr[$_var] = $_value;</li> <li> }else{</li> <li> exit('設定してくださいあなたの値!');</li> <li> } </li> <li> }</li> <li> </li> <li> public function display($_File){</li> <li> //設置モジュールの变量</li> <li> $this->_HtmlFile = HTML_DIR.$_File;</li> <li> //設置编译</li> <li> $this-> ;_Compiled = COMPILED_DIR.md5($_File).$_File.'.php';</li> <li> //設置保存</li> <li> $this->_CaChe = CACHE_DIR.md5($_File).$_File.'.html';</li> <li> / / テンプレートが存在するかどうか判断</li> <li> if(!file_exists($this->_HtmlFile)){</li> <li> exit('テンプレートファイルが存在しません');</li> <li> }</li> <li> //赋值和判断读取</li> <li> if(!$this-> ;_FileVar = file_get_contents($this->_HtmlFile)){</li> <li> exit('テンプレート ファイルの読み取りエラー!');</li> <li> }</li> <li> //if edit コンパイル済みファイルの日付 < date HtmlFile <li> if(!file_exists($this->_Compiled) || filemtime($this->_Compiled) < filemtime($this->_HtmlFile)){</li> <li> $this->Set_Comilled();</li> <li> }</li> <li> //Compiledを含める</li> <li> include $this->_Compiled;</li> <li> $this->SetCaChe();</li> <li> }</li> <li> <li> //再生成したい場合の設定キャッシュファイル</li> <li> private function SetCaChe(){</li> <li> if(!file_exists($this->_CaChe) || filemtime($this->_CaChe) < filemtime($this->_Compiled)){</li> <li> if(NEW_CACHE){</li> <li> file_put_contents($this-> _CaChe, ob_get_contents());</li> <li> ob_end_clean();</li> <li> include $this->_CaChe;</li> <li> }</li> <li> }</li> <li> }</li> <li> <li> // public function</li> <li> public function Set_Comilled(){</li> <li> $this->SetArr(); </li> <li> $this->SetInclude();</li> <li> if(!file_put_contents($this->_Compiled, $this->_FileVar)){</li> <li> exit('コンパイルされたファイルでエラーが発生しました!');</li> <li> }</li> <li> }</li> <li> / /arr</li> <li>プライベート関数 SetArr(){</li> <li> $_preaa = array(</li> <li> '/<!--s+$([w]+)s+-->/',</li> <li> '/<!--s+ifs+ $([w]+)s+-->/',<li> '/<!--s+/ifs+-->/',<li> '/<!--s+elses+-->/' ,<li> '/<!--s+loops+$([w]+)(([w]+),([w]+))s+-->/',<li> '/<!-- s+/loops+-->/',<li> '/<!--s+@([w]+)s+-->/',<li> '/<!--s+#(.*)s+- ->/');</li> <li> $_prebb = array(</li> <li> '<?php echo $this->_KeyArr["$1"];?>',</li> <li> '<?php if ($this-> _KeyArr["$1"]) {?>',</li> <li> '<?php } ?>',</li> <li> '<?php } else { ?>',</li> <li> '<?php foreach ($this- >_KeyArr["$1"] as $$2=>$$3) { ?>',</li> <li> '<?php } ?>',</li> <li> '<?php echo $$1; ?>',</li> <li> '<?php /* $1 */ ?>');</li> <li> $this->_FileVar = preg_replace($_preaa, $_prebb, $this->_FileVar);</li> <li> if(preg_match ($_preaa[0], $this->_FileVar)){</li> <li> $this->_FileVar = $this->SetArr($this->_FileVar);</li> <li> }</li> <li> }</li> <li> <li> //Include</li> <li> private function SetInclude(){</li> <li> $_preFile = '/</li> </ol></div></div> </div></div> </td></tr></table></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="mysql+ajax による州、市、郡の 3 レベルの連携" href="https://m.php.cn/ja/faq/317102.html">mysql+ajax による州、市、郡の 3 レベルの連携</a></span><span>次の記事:<a class="dBlack" title="mysql+ajax による州、市、郡の 3 レベルの連携" href="https://m.php.cn/ja/faq/317111.html">mysql+ajax による州、市、郡の 3 レベルの連携</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="https://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="https://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/2.html" title="正規表現内のすべての式記号 (概要)" class="aBlack">正規表現内のすべての式記号 (概要)</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!</p></div><div class="footermid"><a href="https://m.php.cn/ja/about/us.html">私たちについて</a><a href="https://m.php.cn/ja/about/disclaimer.html">免責事項</a><a href="https://m.php.cn/ja/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body><!-- Matomo --><script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '9']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script><!-- End Matomo Code --></html>