Setelah kelas simplet dirilis terakhir kali ( http://bbs.phpchina.com/thread-85257-1-1.html ), ditemukan banyak cacat, seperti tidak mendukung array multidimensi, komentar dan tidak fungsi caching, kali ini saya Tambahkan semua fitur ini! ! !
Jika Anda tertarik, saya akan menerbitkan tutorialnya lain kali untuk membicarakan beberapa ide dan metode saya dalam menulis kelas ini! ! ! Jika Anda mendukung, Anda dapat mengikuti saya dan mendukung saya!
Kode PHP:
simplet.kelas.php
<?php
kelas SederhanaT {
pribadi $t_vars;
pribadi $templates_dir;
pribadi $templates_c_dir;
pribadi $cache;
pribadi $cache_dir;
fungsi publik __konstruksi() {
$ini->templates_dir = './template/';
$ini->templates_c_dir = './templates_c/';
$ini->tembolok = 0;
$ini->cache_dir = './cache/';
}
fungsi publik setDir($dir, $type = 'template') {
jika(is_dir($dir)) {
if($type == 'templat')
$ini->template_dir = rtrim($dir, '/').'/';
elseif($tipe == 'template_c')
$ini->templates_c_dir = rtrim($dir, '/').'/';
elseif($tipe == 'cache')
$ini->cache_dir = rtrim($dir, '/').'/';
kalau tidak
kembali salah;
kembali benar;
} kalau tidak {
kembali salah;
}
}
cache fungsi publik($waktu) {
if(is_numerik($waktu)) {
$ini->cache = $waktu;
kembali benar;
} kalau tidak {
kembali salah;
}
}
penetapan fungsi publik($var, $nilai = NULL) {
jika (is_array($var)) {
foreach ($var sebagai $kunci => $val) {
$ini->t_vars[$kunci] = $val;
}
} kalau tidak {
$ini->t_vars[$var] = $nilai;
}
}
fungsi pribadi comp($nama file) {
mencoba {
if(!$fp = fopen($nama file, 'r')) {
throw new Exception('Tidak dapat membuka ' .$namafile);
}
$ukuran file = ukuran file($namafile);
if($ukuran file <= 0) {
throw new Exception('Ukuran file harus > 0 ' );
}
$isi = ketakutan($fp, $ukuran file);
fclose($fp);
tidak disetel($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 sebagai \$$1_key => \$$1_val ) { ?>",$isi);
$konten = preg_replace("/<%([$a-zA-Z0-9_]{1,}).loop(([$a-zA-Z0-9_]{1,})) %>/", "<?php foreach( \$$1 sebagai \$$2 ) { ?>", $content);
$konten = preg_replace("/<%([$a-zA-Z0-9_]{1,}).loop(([$a-zA-Z0-9_]{1,}),( [$a-zA-Z0-9_]{1,}))%>/", "<?php foreach( \$$1 sebagai \$$2 => \$$3 ) { ?>", $konten);
$isi = preg_replace("/<%([$a-zA-Z0-9_]{1,}).key%>/", "<?php echo \$$1_key ;?>", $ isi);
$isi = preg_replace("/<%([$a-zA-Z0-9_]{1,}).value%>/", "<?php echo \$$1_val ;?>", $ isi);
$content = preg_replace("/<%([$a-zA-Z0-9_]{1,})\?%>/", "<?php if( \$$1 == benar) { ? >", $isi);
$konten = preg_replace("/<%end%>/","<?php } ?>", $konten);
$content = preg_replace("/<%##common##%>([^<%##end##%>]{0,})<%##end##%>/", "<?php n/* $1 */n?>", $isi);
if (preg_match_all("/<%{([^(}%>)]{1,})}%>/", $konten, $files)) {
$this->comp($this->templates_dir .$files[1][0]);
}
$content = preg_replace("/<%{([^(}%>)]{1,})}%>/", "<?php include '{$this->templates_c_dir}simplet_comp_$1.php'; ? >", $isi);
gema $konten;
$fp = fopen($ini->templates_c_dir . 'simplet_comp_' .basename($filename) . '.php', 'w');
if(!fwrite($fp, $konten)) {
throw new Exception('Tidak dapat menulis konten di ' .$namafile);
}
fclose($fp);
} tangkapan (Pengecualian $e) {
gema $e->getMessage();
}
kembali benar;
}
tampilan fungsi publik($nama file) {
$namafile = $ini->template_dir .
if(!file_exists($namafile)) {
kembali salah;
}
$t_filename_c = $this->templates_c_dir .'.php';
if(!file_exists($t_filename_c) || filemtime($t_filename_c) < filemtime($filename)) {
$ini->komp($namafile);
}
if($ini->cache > 0) {
$cache_file = $ini->cache_dir .
if(!file_exists($cache_file) || (waktu() - filemtime($cache_file)) > $ini->cache) {
ob_start();
foreach ($ini->t_vars sebagai $kunci => $val) {
$$kunci = $val;
}
include($t_namafile_c);
$isi = ob_get_contents();
ob_end_clean();
$fp = fopen($cache_file, 'w');
fwrite($fp, $isi);
fclose($fp);
gema $konten;
tidak disetel($konten);
} kalau tidak {
termasuk($cache_file);
}
} kalau tidak {
foreach ($ini->t_vars sebagai $kunci => $val) {
$$kunci = $val;
}
include($t_namafile_c);
}
}
}
?>
Kode PHP:
tes.php
<?php
require_once('simplet.class.php');
$t = new SimpleT();
$t->cache(10);//Aktifkan fungsi cache dan atur waktu kedaluwarsa menjadi 10 detik
$t->assign('array', array(array('halo','dunia')));
$t->assign('kondisi',salah);
$t->tampilan('index.php');
?>
Kode PHP:
index.php (file template, ditempatkan di folder template/)
<%##common##%>
Berikut komentarnya dan di bawah ini adalah loop array multidimensi
<%##akhir##%>
<%arrays.loop(nilai)%>
<%nilai.loop(nama)%>
<%=nama%>
<%akhir%>
<%end%>
<%##umum##%>
Berikut ini adalah penilaian bersyarat
<%##akhir##%>
<%kondisi?%>
<h1>Kondisi benar</h1>
<%end%>
<%##umum##%>
Di bawah ini adalah file penyertaannya ()
<%##akhir##%>
<%{namafile.php}%>