بعد إصدار الفئة البسيطة في المرة الأخيرة ( http://bbs.phpchina.com/thread-85257-1-1.html )، تبين أن هناك العديد من العيوب، مثل عدم دعم المصفوفات متعددة الأبعاد والتعليقات وعدم وجود وظيفة التخزين المؤقت، وهذه المرة أقوم بإضافة كل هذه الميزات! ! !
إذا كنت مهتمًا، فسوف أقوم بنشر برنامج تعليمي في المرة القادمة للحديث عن بعض أفكاري وطرق كتابة هذا الفصل! ! ! إذا كنت تدعم، يمكنك متابعتي ودعمني!
كود PHP:
simplet.class.php
<?php
فئة سيمبلت {
خاص $t_vars;
خاص $templates_dir؛
خاص $templates_c_dir؛
ذاكرة التخزين المؤقت $ الخاصة؛
خاص $cache_dir؛
الوظيفة العامة __ بناء () {
$this->templates_dir = './templates/';
$this->templates_c_dir = './templates_c/';
$هذا->ذاكرة التخزين المؤقت = 0;
$this->cache_dir = './cache/';
}
الوظيفة العامة setDir($dir, $type = 'template') {
إذا (is_dir($dir)) {
إذا (نوع $ == "قالب")
$this->templates_dir = rtrim($dir, '/').'/';
elseif($type == 'template_c')
$this->templates_c_dir = rtrim($dir, '/').'/';
elseif($type == 'ذاكرة التخزين المؤقت')
$this->cache_dir = rtrim($dir, '/').'/';
آخر
عودة كاذبة.
عودة صحيحة؛
} آخر {
عودة كاذبة.
}
}
ذاكرة التخزين المؤقت للوظيفة العامة($time) {
إذا (is_numeric($time)) {
$this->cache = $time;
عودة صحيحة؛
} آخر {
عودة كاذبة.
}
}
تعيين الوظيفة العامة($var, $value = NULL) {
إذا (is_array($var)) {
foreach ($var كـ $key => $val) {
$this->t_vars[$key] = $val;
}
} آخر {
$this->t_vars[$var] = $value;
}
}
شركات الوظيفة الخاصة(اسم الملف$) {
يحاول {
إذا(!$fp = fopen($filename, 'r')) {
رمي استثناء جديد ("لا يمكن فتح" . $filename)؛
}
$filesize = حجم الملف($filename);
إذا($حجم الملفات <= 0) {
رمي استثناء جديد ("يجب أن يكون حجم الملف> 0")؛
}
$content = fread($fp, $filesize);
fClose($fp);
غير محدد($fp);
$content = preg_replace("/<%=([$a-zA-Z0-9_]{1,})%>/"،"<?php echo \$$1 ;?>"، $content);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).loop%>/"، "<?php foreach( \$$1 as \$$1_key => \$$1_val ) { ?>",$content);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).loop([$a-zA-Z0-9_]{1,})) %>/"، "<?php foreach( \$$1 as \$$2 ) { ?>"، $content);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).loop([$a-zA-Z0-9_]{1,}),( [$a-zA-Z0_]{1,}))%>/"، "<?php foreach( \$$1 as \$$2 => \$$3 ) { ?>"، محتوى $)؛
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).key%>/", "<?php echo \$$1_key ;?>", $ محتوى)؛
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,}).value%>/", "<?php echo \$$1_val ;?>", $ محتوى)؛
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,})\?%>/", "<?php if( \$$1 == true) { ? >"، محتوى $)؛
$content = preg_replace("/<%end%>/"،<?php } ?>"، $content);
$content = preg_replace("/<%##common##%>([^<%##end##%>]{0,})<%##end##%>/", "<?php n/* $1 */n?>", $content);
إذا (preg_match_all("/<%{([^(}%>)]{1,})}%>/"، $content، $files)) {
$this->comp($this->templates_dir . $files[1][0]);
}
$content = preg_replace("/<%{([^(}%>)]{1,})}%>/", "<?php include '{$this->templates_c_dir}simplet_comp_$1.php'; ? >"، محتوى $)؛
صدى محتوى $؛
$fp = fopen($this->templates_c_dir . 'simplet_comp_' . basename($filename) . '.php', 'w');
إذا(!fwrite($fp, $content)) {
طرح استثناء جديد ("لا يمكن كتابة محتوى في اسم الملف" . $)؛
}
fClose($fp);
} التقاط (استثناء $e) {
echo $e->getMessage();
}
عودة صحيحة؛
}
عرض الوظيفة العامة(اسم الملف$) {
$filename = $this->templates_dir $filename;
إذا (! file_exists($filename)) {
عودة كاذبة.
}
$t_filename_c = $this->templates_c_dir 'simplet_comp_' .
إذا (!file_exists($t_filename_c) || filemtime($t_filename_c) < filemtime($filename)) {
$this->comp($filename);
}
إذا($هذا->ذاكرة التخزين المؤقت > 0) {
$cache_file = $this->cache_dir basename($filename);
إذا (!file_exists($cache_file) || (time() - filemtime($cache_file)) > $this->cache) {
ob_start();
foreach ($this->t_vars كـ $key => $val) {
$$مفتاح = $val;
}
تشمل($t_filename_c);
$content = ob_get_contents();
ob_end_clean();
$fp = fopen($cache_file, 'w');
fwrite($fp, $content);
fClose($fp);
صدى محتوى $؛
غير محدد($content);
} آخر {
تشمل($cache_file);
}
} آخر {
foreach ($this->t_vars كـ $key => $val) {
$$مفتاح = $val;
}
تشمل($t_filename_c);
}
}
}
?>
كود PHP:
test.php
<?php
require_once('simplet.class.php');
$t = new SimpleT();
$t->cache(10);// تمكين وظيفة ذاكرة التخزين المؤقت وضبط وقت انتهاء الصلاحية على 10 ثوانٍ
$t->تعيين('المصفوفات', array(array('hello','world')));
$t->تعيين('حالة',خطأ);
$t->display('index.php');
?>
كود PHP:
Index.php (ملف القالب، يوضع في المجلد/القوالب)
<%##common##%>
هنا هو التعليق وأدناه هو حلقة المصفوفة متعددة الأبعاد
<%##end##%>
<%arrays.loop(value)%>
<%value.loop(name)%>
<%=الاسم%>
<%النهاية%>
<%end%>
<%##common##%>
وفيما يلي الحكم المشروط
<%##end##%>
<%حالة?%>
<h1>الشرط صحيح</h1>
<%end%>
<%##common##%>
يوجد أدناه ملف التضمين ()
<%##end##%>
<%{filename.php}%>