Maison développement back-end tutoriel php class.rFastTemplate.php一_PHP教程

class.rFastTemplate.php一_PHP教程

Jul 13, 2016 pm 05:24 PM
multi un

// 2001 Alister Bulman Re-Port multi template-roots + more // PHP3 Port: Copyright ?1999 CDI , All Rights Reserved. // Perl Version: Copyright ?1998 Jason Moore , All Rights Reserved. // // RCS Revision // @(#) $Id: class.rFastTemplate.php,v 1.22 2001/10/18 21:36:53 roland Exp $ // $Source: /home/cvs/projects/php/tools/class.rFastTemplate.php,v $ // // Copyright Notice // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2, or (at your option) // any later version. // // class.rFastTemplate.php is distributed in the hope that it will be // useful, but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // Comments // // I would like to thank CDI for pointing out the // copyright notice attached to his PHP3 port which I had blindly missed // in my first release of this code. // // This work is derived from class.FastTemplate.php3 version 1.1.0 as // available from http://www.thewebmasters.net/. That work makes // reference to the "GNU General Artistic License". In correspondence // with the author, the intent was to use the GNU General Public License; // this work does the same. // // Authors // // Roland Roberts // Alister Bulman (multi template-roots) // Michal Rybarik (define_raw()) // CDI , PHP3 port // Jason Moore , original Perl version // // Synopsis // // require ("PATH-TO-TEMPLATE-CODE/class.Template.php"); // $t = new Template("PATH-TO-TEMPLATE-DIRECTORY"); // $t->define (array(MAIN => "diary.html")); // $t->setkey (VAR1, "some text"); // $t->subst (INNER, "inner") // $t->setkey (VAR1, "some more text"); // $t->subst (INNER, ".inner") // $t->setkey (VAR2, "var2 text"); // $t->subst (CONTENT, "main"); // $t->print (CONTENT); // // Description // // This is a class.FastTemplate.php3 replacement that provides most of the // same interface but has the ability to do nested dynamic templates. The // default is to do dynamic template expansion and no special action is // required for this to happen. // // class.FastTemplate.php3 Methods Not Implemented // // clear_parse // Same as clear. In fact, it was the same as clear in FastTemplate. // clear_all // If you really think you need this, try // unset $t; // $t = new Template ($path); // which gives the same effect. // clear_tpl // Use unload instead. This has the side effect of unloading all parent // and sibling templates which may be more drastic than you expect and // is different from class.FastTemplate.php3. This difference is // necessary since the only way we can force the reload of an embedded // template is to force the reload of the parent and sibling templates. // // class.FastTemplate.php3 Methods by Another Name // // The existence of these functions is a historical artifact. I // originally had in mind to write a functional equivalent from scratch. // Then I came my senses and just grabbed class.FastTemplate.php3 and // started hacking it. So, you can use the names on the right, but the // ones on the left are equivalent and are the names used in the original // class.FastTemplate.php3. // // parse --> subst // get_assiged --> getkey // assign --> setkey // clear_href --> unsetkey // clear_assign --> unsetkey // FastPrint --> xprint // class rFastTemplate { // File name to be used for debugging output. Needs to be set prior to // calling anything other than option setting commands (debug, debugall, // strict, dynamic) because once the file has been opened, this is ignored. var $DEBUGFILE = /tmp/class.rFastTemplate.php.dbg; // File descriptor for debugging output. var $DEBUGFD = -1; // Array for individual member functions. You can turn on debugging for a // particular member function by calling $this->debug(FUNCTION_NAME) var $DEBUG = array (); // Turn this on to turn on debugging in all member functions via // $this->debugall(). Turn if off via $this->debugall(false); var $DEBUGALL = false; // Names of actual templates. Each element will be an array with template // information including is originating file, file load status, parent // template, variable list, and actual template contents. var $TEMPLATE = array(); // Holds paths-to-templates (See: set_root and FindTemplate) var $ROOT = array(); // Holds the HANDLE to the last template parsed by parse() var $LAST = ; // Strict template checking. Unresolved variables in templates will generate a // warning. var $STRICT = true; // If true, this suppresses the warning generated by $STRICT=true. var $QUIET = false; // Holds handles assigned by a call to parse(). var $HANDLE = array(); // Holds all assigned variable names and values. var $VAR = array(); // Set to true is this is a WIN32 server. This was part of the // class.FastTemplate.php3 implementation and the only real place it kicks // in is in setting the terminating character on the value of $ROOT, the // path where all the templates live. var $WIN32 = false; // Automatically scan template for dynamic templates and assign new values // to TEMPLATE based on whatever names the HTML comments use. This can be // changed up until the time the first parse() is called. Well, you can // change it anytime, but it will have no effect on already loaded // templates. Also, if you have dynamic templates, the first call to parse // will load ALL of your templates, so changing it after that point will // have no effect on any defined templates. var $DYNAMIC = true; // Grrr. Dont try to break these extra long regular expressions into // multiple lines for readability. PHP 4.03pl1 chokes on them if you do. // Im guessing the reason is something obscure with the parenthesis // matching, the same sort of thing Tcl might have, but Im not sure. // Regular expression which matches the beginning of a dynamic/inferior // template. The critical bit is that we need two parts: (1) the entire // match, and (2) the name of the dynamic template. The first part is // required because will do a strstr() to split the buffer into two // pieces: everything before the dynamic template declaration and // everything after. The second is needed because after finding a BEGIN // we will search for an END and they both have to have the same name of // we consider the template malformed and throw and error. // Both of these are written with PCRE (Perl-Compatible Regular // Expressions) because we need the non-greedy operators to insure that // we dont read past the end of the HTML comment marker in the case that // the BEGIN/END block have trailing comments after the tag name. var $REGEX_DYNBEG = /()/; // Regular expression which matches the end of a dynamic/inferior // template; see the comment about on the BEGIN match. var $REGEX_DYNEND = /()/; // Regular expression which matches a variable in the template. var $REGEX_VAR = /{[A-Za-z][-_A-Za-z0-9]*}/; // // Description // Constructor. // function rFastTemplate ($pathToTemplates = ) { // $pathToTemplates can also be an array of template roots, handled in set_root global $php_errormsg; if (!empty($pathToTemplates)) { $this->set_root ($pathToTemplates); } $this->DEBUG = array (subst => false, parse_internal => false, parse_internal_1 => false, parsed => false, clear => false, clear_dynamic => false, load => false); return $this; } // // Description // Set the name to be u

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/532115.htmlTechArticle// 2001 Alister Bulman Re-Port multi template-roots + more // PHP3 Port: Copyright ?1999 CDI , All Rights Reserved. // Perl Version: Copyright ?1998 Jason Moore , All Rights Reserv...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le kvr800d2n6 est-il compatible avec la DDR3 ? (Le kvr800d2n6 fournit-il une version 4 Go) Le kvr800d2n6 est-il compatible avec la DDR3 ? (Le kvr800d2n6 fournit-il une version 4 Go) Jan 09, 2024 pm 10:33 PM

Le kvr800d2n6 peut-il être utilisé avec la DDR3 non. 1. Étant donné que le kvr800d2n6 est un module de mémoire DDR2 et que la DDR3 est un autre type de module de mémoire, les deux ne sont pas compatibles. 2. Bien que les formes des emplacements DDR2 et DDR3 soient les mêmes, il existe des différences en termes de tension, de synchronisation, de taux de transmission, etc., de sorte que différents types de modules de mémoire ne peuvent pas être interopérables. kvr800d2n6 est une clé mémoire de plusieurs générations. Lors de la réécriture du contenu, la langue doit être changée en chinois sans changer la signification originale. kvr800 Lors de la réécriture du contenu de la mémoire, la langue doit être changée en chinois sans changer la signification originale. (DDR2). Mémoire La fréquence principale est de 800 MHz. kvr800d2n62g est Kingston KVR800

Exercice pratique Python Pandas, une progression rapide pour les novices en informatique ! Exercice pratique Python Pandas, une progression rapide pour les novices en informatique ! Mar 20, 2024 pm 10:21 PM

Utilisez read_csv() pour lire les fichiers CSV : df=pd.read_csv("data.csv") Gérer les valeurs manquantes : Supprimer les valeurs manquantes : df=df.dropna() Remplissez les valeurs manquantes : df["column_name"].fillna( value ) Convertir le type de données : df["column_name"]=df["column_name"].astype(dtype) Tri et regroupement : Tri : df.sort_values(by="column_name") Regroupement : groupby_object=df.groupby(by= " nom de colonne

Quelle devise est MULTI et quels sont ses avantages ? Quelle devise est MULTI et quels sont ses avantages ? Jan 31, 2024 pm 04:23 PM

MULTI coin est une monnaie numérique décentralisée basée sur la technologie des contrats intelligents et visant à fournir des services de transfert et d'échange d'actifs rapides, pratiques et peu coûteux. Ses avantages : 1. Décentralisation ; 2. Paiement transfrontalier ; 3. Faible coût ; 4. Protection de la vie privée ;

Conseils avancés PHP PDO : utilisation de procédures stockées et de transactions Conseils avancés PHP PDO : utilisation de procédures stockées et de transactions Feb 20, 2024 am 10:01 AM

Les procédures stockées sont des instructions SQL précompilées et stockées sur le serveur de base de données. Lorsque vous devez exécuter une procédure stockée, il vous suffit d'appeler le nom de la procédure stockée sans réécrire l'instruction SQL. Les procédures stockées peuvent améliorer la lisibilité et l'efficacité du code, en particulier lorsque des instructions SQL complexes ou répétitives doivent être exécutées. 1. Créez la procédure stockée CREATEPROCEDUREget_customer_by_id(INcustomer_idINT)BEGINSELECT*FROMcustomersWHEREcustomer_id=customer_id;END2 Appelez la procédure stockée $stmt=$pdo->prepare(.

Devenez un maître de la gestion des exceptions Java : prenez le contrôle des erreurs dans votre code Devenez un maître de la gestion des exceptions Java : prenez le contrôle des erreurs dans votre code Mar 24, 2024 pm 04:06 PM

Le système de gestion des exceptions de Java suit une structure hiérarchique, de la classe Throwable la plus générale aux sous-classes plus spécifiques telles que Exception et Error. Comprendre cette hiérarchie est essentiel car elle détermine la manière dont les exceptions sont gérées et leur portée. 2. Maîtrisez le mécanisme de propagation des exceptions Lorsqu'une exception se propage dans le programme, elle remonte dans la pile d'appels. Si l’exception n’est pas gérée dans le code, elle sera propagée à la méthode qui l’a appelée, et ainsi de suite. Comprendre les mécanismes de propagation des exceptions est essentiel pour garantir que les exceptions sont traitées de manière appropriée. 3. Utilisez le bloc try-catch-finally Le bloc try-catch-finally est le mécanisme préféré pour gérer les exceptions en Java. Le bloc try contient le code qui doit être exécuté, tandis que

Quel ak est le meilleur en contre-guerre (classement des ak en contre-guerre) Quel ak est le meilleur en contre-guerre (classement des ak en contre-guerre) Jan 07, 2024 pm 06:34 PM

Quel AK est le meilleur en contre-guerre : l'AK47 est un fusil très célèbre qui est largement utilisé par les armées et les organisations terroristes du monde entier. Il est connu pour ses excellentes performances et sa fiabilité et est considéré comme l’un des meilleurs fusils d’assaut au monde. La conception de l'AK47 est simple et pratique, adaptée à une utilisation dans divers environnements difficiles. Il utilise des munitions de calibre 7,62 mm, qui ont une portée et une pénétration élevées. L'AK47 est peu coûteux à fabriquer et facile à entretenir et à utiliser, ce qui le rend populaire. Même si sa conception présente certaines limites, elle reste une arme très fiable et efficace. Que ce soit pour des opérations militaires ou pour la défense personnelle, l'AK47 est un choix puissant. L’arme à feu la plus classique de la contre-guerre est sans aucun doute l’AK47. Dans le centre commercial, le prix de vente permanent de l'AK47 est de

Le temple de la grammaire Java : embarquez pour un pèlerinage vers la grammaire et libérez votre potentiel de programmation Le temple de la grammaire Java : embarquez pour un pèlerinage vers la grammaire et libérez votre potentiel de programmation Mar 30, 2024 pm 01:01 PM

Une déclaration de variable détermine le nom, le type et la portée de la variable. Java prend en charge les types primitifs (int, double, booléen) et référence (String, List). 2. Contrôler le flux Utilisez if/else, switch/case et les boucles (while, do-while, for) pour contrôler le flux du programme. Les instructions conditionnelles vérifient les conditions et les instructions de branche exécutent différents blocs de code en fonction des conditions. 3. Array Array stocke une collection d'éléments du même type. Les tableaux sont déclarés avec le type [] et les éléments sont accessibles par index. 4. Classes et objets Les classes sont des modèles utilisés pour créer des objets avec un état et un comportement. Un objet est une instance d’une classe spécifique et a accès aux méthodes membres et aux variables de cette classe. 5. Les sous-classes héritées héritent des champs et

Un guide pratique du modèle de mémoire Java : comment éviter les pièges courants de la programmation simultanée Un guide pratique du modèle de mémoire Java : comment éviter les pièges courants de la programmation simultanée Feb 19, 2024 pm 02:45 PM

Visibilité : un thread ne peut voir que ses propres modifications apportées aux variables partagées, tandis que les modifications apportées aux variables partagées par d'autres threads nécessitent une sorte de mécanisme de synchronisation pour être visibles. Atomicité : Une opération est soit entièrement exécutée, soit pas exécutée du tout, sans état intermédiaire. Ordre : les opérations de thread sur les variables partagées doivent être effectuées dans un certain ordre, même dans différents threads. 2. Principe d'arrivée avant Le principe d'arrivée avant est l'une des règles fondamentales de JMM, qui définit la séquence d'accès aux variables partagées entre les threads. Selon le principe du « arrivé avant », si une opération A se produit avant une autre opération B, alors la modification par A de la variable partagée se produira certainement dans B.

See all articles