Dans PHP, la fonction preg_replace_callback_array est un outil puissant qui peut traiter le texte en fonction des expressions régulières et des fonctions de rappel. En utilisant intelligemment cette fonction, nous pouvons implémenter un moteur de modèle simple qui intègre facilement des variables et une logique dans les modèles HTML.
Cet article expliquera comment implémenter un moteur de modèle simple à l'aide de preg_replace_callback_array , et nous montrerons comment remplacer les espaces réservés dans les modèles à l'aide de cette fonction.
preg_replace_callback_array est une fonction de PHP qui effectue des opérations de remplacement basées sur l'expression régulière et peut spécifier une fonction de rappel pour chaque expression régulière correspondante. La fonction de rappel peut être personnalisée en fonction du contenu correspondant et renvoie le résultat de remplacement final.
Le prototype de fonction est le suivant:
preg_replace_callback_array(array $patterns_and_callbacks, string $subject);
$ motifs_and_callbacks : un tableau dont les clés sont des expressions et des valeurs régulières sont des fonctions de rappel.
$ Sujet : La chaîne à traiter.
Nous allons créer un moteur de modèle simple qui remplace les variables dans les modèles et prend en charge la logique conditionnelle simple. Avec preg_replace_callback_array , nous pouvons facilement implémenter cette fonction.
Supposons que nous ayons un modèle HTML simple, où les espaces réservés du modèle sont enveloppés dans {{}} :
$template = "<h1>accueillir,{{name}}!</h1><p>{{message}}</p>";
$variables = [
'name' => 'Zhang San',
'message' => 'Voici un exemple de moteur de modèle simple。',
];
Nous utiliserons preg_replace_callback_array pour définir les règles de remplacement de l'espace réservé. Nous devons faire face à deux tâches principales:
Remplacez les variables (par exemple, {{name}} ) en valeurs réelles.
Gérez la logique personnalisée, comme afficher différents contenus en fonction des conditions.
Pour implémenter ces fonctions, nous devons construire des expressions régulières appropriées et spécifier une fonction de rappel pour chaque expression régulière.
Ce qui suit est le code PHP qui implémente le moteur de modèle:
<?php
$template = "<h1>accueillir,{{name}}!</h1><p>{{message}}</p>";
$variables = [
'name' => 'Zhang San',
'message' => 'Voici un exemple de moteur de modèle simple。',
];
// utiliser preg_replace_callback_array Implémenter le moteur de modèle
$patterns_and_callbacks = [
'/{{(.*?)}}/' => function ($matches) use ($variables) {
$key = $matches[1];
return isset($variables[$key]) ? $variables[$key] : '';
},
];
$output = preg_replace_callback_array($patterns_and_callbacks, $template);
echo $output;
Le tableau $ Patterns_and_Callbacks définit une expression régulière /!
Pour chaque espace réservé correspondant, nous le remplaçons par la valeur réelle dans le tableau des variables $ via la fonction de rappel. Si la variable correspondante ne peut être trouvée, la fonction de rappel renvoie une chaîne vide.
Afin de rendre le moteur de modèle plus fort, nous pouvons ajouter la prise en charge des instructions conditionnelles, telles que déterminer s'il faut afficher un certain contenu basé sur une certaine condition. Nous pouvons utiliser une syntaxe similaire à {{si condition}} pour implémenter cette fonction.
Voici un exemple montrant comment utiliser des jugements conditionnels simples dans un modèle:
<?php
$template = "<h1>accueillir,{{name}}!</h1>{{if show_message}}<p>{{message}}</p>{{endif}}";
$variables = [
'name' => 'Zhang San',
'message' => 'Voici un exemple de moteur de modèle simple。',
'show_message' => true, // Contrôler s'il faut afficher les messages
];
// utiliser preg_replace_callback_array Implémenter le moteur de modèle
$patterns_and_callbacks = [
'/{{(.*?)}}/' => function ($matches) use ($variables) {
$key = $matches[1];
return isset($variables[$key]) ? $variables[$key] : '';
},
'/{{if (.*?)}}(.*?){{endif}}/s' => function ($matches) use ($variables) {
$condition = $matches[1];
$content = $matches[2];
// Analyser les conditions et le juge
if (isset($variables[$condition]) && $variables[$condition]) {
return $content;
}
return '';
},
];
$output = preg_replace_callback_array($patterns_and_callbacks, $template);
echo $output;
Une nouvelle expression régulière / {{if (. *?)}} (. *?) {{Endif}} / s est ajoutée pour correspondre à l'instruction conditionnelle.
La fonction de rappel vérifie si la condition dans {{si condition}} est vraie. Si true, {{message}} s'affiche; Si faux, rien n'est affiché.
Via preg_replace_callback_array , nous pouvons implémenter un moteur de modèle très simple qui gère le remplacement variable et le jugement conditionnel dans les modèles. Bien que ce moteur soit très basique, il montre comment utiliser des expressions et des fonctions de rappel régulières pour implémenter la fonctionnalité principale du moteur de modèle. Vous pouvez développer des fonctions plus complexes sur cette base, telles que des boucles, des filtres, des définitions de macro, etc., et créer un moteur de modèle plus puissant.