#phpchina开户#
Smarty wurde schon immer als überflüssig angesehen. Ich denke, Leute, die Smarty für überflüssig halten, sind überflüssig.... Reden wir nicht mehr darüber. Heute werde ich Ihnen beibringen, wie man eine Template-Engine schreibt, damit jeder seine eigene Template-Engine schreiben kann. Nach dem Lesen dieses Artikels werden Sie Smarty besser verstehen. Meine Template-Engine heißt Stupid (was „dumm“ bedeutet), ich mag keine Dinge, die zu clever sind!
Die Stupid-Template-Engine besteht aus drei Dateien: dumm.class.php, dumm_parser.class.php, dumm_debugger.class.php.
Die Aufgabe von Stupid.class.php besteht darin, Variablen, Vorlagenpfade und Anzeigefunktionen festzulegen, während Stupid_parser.class.php zum Kompilieren von Vorlagendateien und Stupid_debugger.class.php zum Debuggen verwendet wird.
Okay, lass uns jetzt dumme.class.php schreiben.
1. Erstellen Sie eine neue PHP-Datei mit dem Namen „dumm.class.php“.
Unsere Klasse heißt Stupid. Lassen Sie uns zuerst die Mitgliedsvariablen entwerfen.
Zu den Mitgliedsvariablen gehören: $_tpl_vars, $_tpl_file, $_parser, $_debugger;
$_tpl_vars: wird zum Speichern von Vorlagenvariablen verwendet;
$_tpl_file: wird zum Speichern des Namens der Vorlagendatei verwendet;
$_parser: Derjenige, der das StupidParser-Objekt speichert, ist das kompilierte Objekt;
$_debugger: Was das StupidDebug-Objekt speichert, ist das Debugging-Objekt.
Nachfolgend werden zwei Konstanten definiert, die zum Speichern des Vorlagenordners und des Kompilierungsordners verwendet werden:
define('TPL_DIR', './templates/');
define('TPL_C_DIR', './templates_c/');Kodierung starten
>>>
<?php
define('TPL_DIR', './templates/');
define('TPL_C_DIR', './templates_c/')
;
private $_tpl_vars;
private $_tpl_file;
privater $_parser;
privat $_debugger;
}
?>
Beginnen Sie mit dem Schreiben eines Konstruktors >>>
öffentliche Funktion Stupid() {
if(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
exit('Fehler: Bitte legen Sie den Vorlagenordner und den Kompilierungsordner richtig fest');
}
}
Im Konstruktor ermitteln wir, ob der Vorlagenpfad und der Kompilierungspfad korrekt festgelegt sind.
Unsere Klasse verfügt hauptsächlich über die folgenden Methoden:
zuweisen(), set_tpl_dir(), set_parsed_dir(), display(), debug().
Methode „assign()“:
Der Zweck von „assign()“ besteht darin, Vorlagenvariablen festzulegen. Der Code lautet wie folgt: >>>
öffentliche Funktion „assign($var, $value)“
if(isset($var) && trim($var) != '') {
$this->_tpl_vars[$var] = $value;
return true;
} anders {
exit('Fehler: Bitte Variablennamen festlegen');
}
}
Wir bestimmen zunächst, ob der Benutzer den Variablennamen festgelegt hat. Verwenden Sie isset($var) && trim($var) != '', um festzustellen, trim($var) != '' verhindert, dass der Benutzer den Variablennamen mit Leerzeichen festlegt
Methode display()
der Mitgliedsvariablen
Die display()-Methode ist die wichtigste Methode in der Stupid-Klasse. Sie wird verwendet, um anzuzeigen und zu erkennen, ob die Vorlage aktualisiert wurde. Wenn sie nicht aktualisiert wird, wird sie erneut kompiliert
Der Code lautet wie folgt >>>
public
function display( $tpl_file) {
$template_file = TPL_DIR.$tpl_file;
if(!file_exists($template_file)) {
exit('Fehler: Vorlagendatei existiert nicht');
}
$parsed_file = TPL_C_DIR.md5($tpl_file).'.php';
if(!file_exists($parsed_file) || filemtime($parsed_file) < filemtime($template_file)) {
require_once './stupid_parser.class.php';
$this->_parser = new StupidParser();
$this->_parser->compile($tpl_file);
}
include $parsed_file;
}
Diese Methode basiert auf der Anweisung !file_exists($parsed_file)||filemtime($parsed_file)< filemtime($template_file), um festzustellen, ob sie kompiliert wurde und ob die Vorlagendatei aktualisiert wurde Nachdem die Vorlagendatei aktualisiert wurde, müssen wir sie neu kompilieren, ein StupidParser-Objekt erstellen und die kompilierte Vorlagendatei einführen ist eine gewöhnliche PHP-Datei
debug()-Methode
Die Debugg()-Methode ist relativ einfach. Sie besteht darin, die Datei dumm_debugger.class.php einzuführen, ein StupidDebuger-Objekt zu erstellen und die Startmethode von StupidDebuger zum Debuggen aufzurufen.
Der Code lautet wie folgt >>>
public function debug ($ tpl_file ) {
if (include_once("stupid_debugger.class.php")) {
$this->_debugger = new StupidDebugger(TPL_DIR. $tpl_file);
$this->_debugger->start();
} anders {
exit('Fehler: Debuger-Klassendatei existiert nicht');
}
}
haben
, können Siediese
einreichen
define('TPL_DIR', './templates/');
define('TPL_C_DIR', './templates_c/');
Klasse Dumm {
private $_tpl_vars;
private $_tpl_file;
privater $_parser;
private $_debug;
öffentliche Funktion Stupid() {
if(!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR)) {
exit('Fehler: Bitte legen Sie den Vorlagenordner und den Kompilierungsordner richtig fest');
}
}
öffentliche Funktionzuweisung($var, $value) {
if(isset($var) && trim($var) != '') {
$this->_tpl_vars[$var] = $value;
return true;
} anders {
exit('Fehler: Bitte Variablennamen festlegen');
}
}
öffentliche Funktion display($tpl_file) {
$template_file = TPL_DIR.$tpl_file;
if(!file_exists($template_file)) {
exit('Fehler: Vorlagendatei existiert nicht');
}
$parsed_file = TPL_C_DIR.md5($tpl_file).'.php';
if(!file_exists($parsed_file) || filemtime($parsed_file) < filemtime($template_file)) {
require_once './stupid_parser.class.php';
$this->_parser = new StupidParser();
$this->_parser->compile($tpl_file);
}
include $parsed_file;
}
function debug($tpl_file) {
if (include_once("stupid_debugger.class.php")) {
$this->_debugger = new StupidDebugger($this->_template_dir . $tpl_file);
$this->_debugger->start();
} anders {
exit('Fehler: Debuger-Klassendatei existiert nicht');
}
}
}
?>