PHP自写简单模板引擎,供新手学习
今天要写点小东西,突然想到要用模板引擎。就“随手”写了一个,发上来供新手学习。搞了这么久PHP,想想也真是感慨,当年研究了几天的东西现在一两个小时就弄完了,当年一起完耍的女神现在已经不知所踪了。。。咳咳,下面是代码:
<?php /**************** * @author: 一曲忧伤 * @email: [email protected] * @discription: 简单模板引擎 */define('INVIEW', true);class view {    var $tpl_dir = 'template';    var $cache_dir = 'cache';    var $tpl_ext = '.html';    var $var_left = '{';    var $var_right = '}';    function __construct($config=array()) {        extract($config);        if(isset($tpl_dir))$this->tpl_dir = $tpl_dir; if(isset($cache_dir))$this->cache_dir = $cache_dir; if(isset($tpl_ext))$this->tpl_ext = $tpl_ext; if(isset($var_left))$this->var_left = $var_left; if(isset($var_right))$this->var_right = $var_right; } function load($tplfilename) { $tplfile = $this->tpl_dir.'/'.$tplfilename.$this->tpl_ext; if(!file_exists($tplfile)) die('Template not found: '.$tplfile); return $this->cache($tplfilename, $tplfile); } //判断模板是否缓存,如模板文件有更改则重新编译 function cache($tplname, $tpl_file) { $cache_file = $this->cache_dir.'/'.md5($tplname).'.php'; if(!file_exists($cache_file) || filemtime($tpl_file)>filemtime($cache_file)) $this->compile($tpl_file, $cache_file); return $cache_file; } //编译模板内容到PHP格式,并写入缓存 function compile($tpl, $cache) { $body = file_get_contents($tpl); $vl = $this->var_left; $vr = $this->var_right; $patterns = array( "#$vl\s*include:(.+?)\s*$vr#i", "#$vl\s*if\s+(.+?)\s*$vr#i", "#$vl\s*else\s*$vr#i", "#$vl\s*elseif\s+(.+?)\s*$vr#i", "#$vl\s*endif\s*$vr#i", "#$vl\s*/if\s*$vr#i", "#$vl\s*foreach\s+(.+?):(.+?)\s*$vr#i", "#$vl\s*endforeach\s*$vr#i", "#$vl\s*/foreach\s*$vr#i", "#$vl([0-9a-zA-Z_]+?)\.([0-9a-zA-Z_]+?)\.([0-9a-zA-Z_]+?)$vr#i", "#$vl([0-9a-zA-Z_]+?)\.([0-9a-zA-Z_]+?)$vr#i", "#$vl([0-9a-zA-Z_\[\]\'\"]+?)$vr#i", "#$vl([0-9a-zA-Z_]+?):(.*?)$vr#i" ); $replacements = array( "<?php include show('\\1'); ?>", "<?php if(\\1): ?>", "<?php else: ?>", "<?php elseif(\\1): ?>", "<?php endif; ?>", "<?php endif; ?>", "<?php if(count($\\1)>0):\$autoindex=0;foreach($\\1 as \\2):\$autoindex++; ?>", "<?php endforeach;endif; ?>", "<?php endforeach;endif; ?>", "<?php echo $\\1['\\2']['\\3']; ?>", "<?php echo $\\1['\\2']; ?>", "<?php echo $\\1; ?>", "<?php echo \\1(\\2); ?>" ); $body = preg_replace($patterns, $replacements, $body); file_put_contents($cache, "<?php if(!defined('INVIEW'))die('YIQU'); ?>".$body); }}$view = new view();function show($tpl) { global $view; return $view->load($tpl);}
使用方法PHP文件:
<?phpinclude 'view.php';$title = '文档标题';$a=array('a'=>'rows','b'=>array('c'=>'inarray')); include show('index');
使用方法HTML模板文件:
<title>{title}</title><meta http-equiv="Content-Type" content="text/html;charset=utf-8">你好,仅供参考<br>{a.a}{a.b.c}<br>{foreach a:$v}{autoindex}.{v}<br>{/foreach}{include:footer}
模板文件放在template目录,缓存放在cahce目录,这两个目录都要手动创建,缓存加上判断不可直接访问。可以使用
{include:子模板}
{if 条件}
{foreach 变量:as语句},$autoindex为自增变量
{调用函数:参数}
{变量},包含数组变量简化写法(最多只支持三维数组)
等语法。
好了,整个模板引擎实现比较简单,因为一直比较喜欢这种include方式的模板,只供新手学习原理就好了。
=====================国际惯例=======================
刚开始学着写一些博客,写得不好的地方请见谅,觉得还可以就赏脸赞下吧!
我的QQ群(PHP)336533596,QQ 451309839,欢迎加入。相互交流,聊天吹牛~

TomakePhPapplicationSfaster, followthesesteps : 1) useopCodeCaching likeOpcachetOrpectipiledScriptBecode.2) MinimizedAtabaseQueriesByUsingQueryCachingandEfficientIndexing.3) leveragephp7 assistorBetterCodeeficiession.4) 구현 전략적 지시

toImprovePhPapplicationSpeed, followthesesteps : 1) enableOpCodeCachingWithApcuTeCeScripteXecutionTime.2) 구현 구현

의존성 주입 (DI)은 명시 적으로 전이적 종속성에 의해 PHP 코드의 테스트 가능성을 크게 향상시킵니다. 1) DI 디퍼 커플 링 클래스 및 특정 구현은 테스트 및 유지 보수를보다 유연하게 만듭니다. 2) 세 가지 유형 중에서, 생성자는 상태를 일관성있게 유지하기 위해 명시 적 표현 의존성을 주입합니다. 3) DI 컨테이너를 사용하여 복잡한 종속성을 관리하여 코드 품질 및 개발 효율성을 향상시킵니다.

DatabaseQuesyOptimizationInphPinVolvesVesstoigiestoInsperferferferferformance.1) SelectOnlyNecessaryColumnstoredAtatatransfer.2) useinDexingTeSpeedUpdatarretieval.3) ubstractOrerEresultSoffRequeries.4) UtilizePreDstatements Offeffi

phpisusedforendingemailsduetoitsbuitsbuitsbuit-inmail () functionandsupportivelibraries lifephpmailerandswiftmailer.1) usethemail () functionforbasicemails, butithaslimitations.2) EmployPhpmailerforAdvancedFeatirehtMailsAndAtachments.3))

PHP 성능 병목 현상은 다음 단계를 통해 해결할 수 있습니다. 1) 성능 분석을 위해 Xdebug 또는 Blackfire를 사용하여 문제를 찾으십시오. 2) 데이터베이스 쿼리 최적화 및 APCU와 같은 캐시 사용; 3) Array_Filter와 같은 효율적인 기능을 사용하여 배열 작업을 최적화합니다. 4) 바이트 코드 캐시에 대한 OpCache 구성; 5) HTTP 요청을 줄이고 사진 최적화와 같은 프론트 엔드 최적화; 6) 지속적으로 모니터링하고 성능을 최적화합니다. 이러한 방법을 통해 PHP 응용 프로그램의 성능을 크게 향상시킬 수 있습니다.

종속성 주사 (di) inphpisadesignpattern thatmanages 및 enpleducesclassdelencies, 향상 codemodularity, trestability 및 maintainability .itallowspassingDepporsingDikedAbaseConnectionStoclassesAssparameters, 촉진 이용성.

cachingimprovesphpperferferfermanceStoringResultsOfcomputationSorqueriesforquickRetrieval, retingServerloadandenhancancing responsetimestimes : 1) opcodecaching, opcodecaching, whitescompiledphps scriptsinmorytoskipcompileation; 2) dataCachingUsingmemmc


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

WebStorm Mac 버전
유용한 JavaScript 개발 도구