


Explication détaillée de la façon dont PHP implémente le mécanisme Hook
Comment PHP implémente-t-il le mécanisme Hook ? Cet article présente principalement comment implémenter le mécanisme Hook en PHP, et présente en détail le principe et le processus d'implémentation du mécanisme Hook. Il a une certaine valeur de référence, et ceux qui sont intéressés peuvent en apprendre davantage. J'espère que cela aide tout le monde.
Je ne connais en fait pas le concept de "hook". J'ai récemment vu ce mécanisme utilisé dans un framework PHP pour étendre le projet, je vais donc y jeter un oeil.
Le mécanisme dit Hook est une technologie populaire dans la programmation Windows. L'idée principale est d'enterrer (prédéfinir) un hook à l'avance où des fonctionnalités peuvent être ajoutées. Ce hook n'a aucune signification pratique. Lorsque nous devons re-modifier ou ajouter de la logique à cet endroit, montez simplement la classe ou la méthode étendue. ce point.
L'idée de base du mécanisme de plug-in hook :
Dans le code du projet, placez une fonction hook là où vous pensez qu'elle sera développée (non développée encore), et attendez l'expansion. À ce stade, vous pouvez monter les classes et les fonctions qui doivent être implémentées sur ce hook pour réaliser l'expansion.
Voici à quoi ressemble l’idée. Cela semble plutôt général. Regardons un exemple de mise en œuvre en ligne.
L'ensemble du mécanisme du plug-in se compose de trois parties :
1.hook classe de gestionnaire de plug-in : il s'agit du fichier principal et est un objet global global de l'application. . Il a trois responsabilités principales
1> Surveiller tous les plug-ins enregistrés et instancier ces objets plug-in.
2> Enregistrez tous les plug-ins.
3>Lorsque la condition de hook est remplie, la méthode objet correspondante est déclenchée.
2. Implémentation de la fonction du plug-in : cette opération est principalement effectuée par des développeurs tiers, mais elle doit suivre nos règles (définition de la classe du gestionnaire). Cette règle est stipulée par le mécanisme du plug-in et varie en fonction. sur le mécanisme de plug-in.
3. Déclenchement du plug-in : c'est-à-dire la condition de déclenchement du crochet. Il s'agit d'un petit morceau de code placé là où vous devez appeler le plugin pour déclencher ce hook.
----------------------------------Regardez les solutions des autres --- -- -------------------
La première est la classe du gestionnaire de plug-ins PluginManager. Cette classe doit être placée dans la référence globale. , là où le plug-in est nécessaire, il sera chargé en premier.
<?php /** * * 插件机制的实现核心类 */ class PluginManager { /** * 监听已注册的插件 * * @access private * @var array */ private $_listeners = array(); /** * 构造函数 * * @access public * @return void */ public function __construct() { #这里$plugin数组包含我们获取已经由用户激活的插件信息 #为演示方便,我们假定$plugin中至少包含 #$plugin = array( # 'name' => '插件名称', # 'directory'=>'插件安装目录' #); $plugins = get_active_plugins();#这个函数请自行实现 if($plugins) { foreach($plugins as $plugin) {//假定每个插件文件夹中包含一个actions.php文件,它是插件的具体实现 if (@file_exists(STPATH .'plugins/'.$plugin['directory'].'/actions.php')) { include_once(STPATH .'plugins/'.$plugin['directory'].'/actions.php'); $class = $plugin['name'].'_actions'; if (class_exists($class)) { //初始化所有插件 new $class($this); } } } } #此处做些日志记录方面的东西 } /** * 注册需要监听的插件方法(钩子) * * @param string $hook * @param object $reference * @param string $method */ function register($hook, &$reference, $method) { //获取插件要实现的方法 $key = get_class($reference).'->'.$method; //将插件的引用连同方法push进监听数组中 $this->_listeners[$hook][$key] = array(&$reference, $method); #此处做些日志记录方面的东西 } /** * 触发一个钩子 * * @param string $hook 钩子的名称 * @param mixed $data 钩子的入参 * @return mixed */ function trigger($hook, $data='') { $result = ''; //查看要实现的钩子,是否在监听数组之中 if (isset($this->_listeners[$hook]) && is_array($this->_listeners[$hook]) && count($this->_listeners[$hook]) > 0) { // 循环调用开始 foreach ($this->_listeners[$hook] as $listener) { // 取出插件对象的引用和方法 $class =& $listener[0]; $method = $listener[1]; if(method_exists($class,$method)) { // 动态调用插件的方法 $result .= $class->$method($data); } } } #此处做些日志记录方面的东西 return $result; } }
La prochaine étape est la mise en œuvre de DEMO_actions, un simple plug-in. Il s'agit d'un simple plug-in Hello World permettant de générer une phrase. Dans des situations réelles, say_hello peut inclure des opérations sur la base de données ou une autre logique spécifique.
<?php /** * 这是一个Hello World简单插件的实现 */ /** *需要注意的几个默认规则: * 1. 本插件类的文件名必须是action * 2. 插件类的名称必须是{插件名_actions} */ class DEMO_actions { //解析函数的参数是pluginManager的引用 function __construct(&$pluginManager) { //注册这个插件 //第一个参数是钩子的名称 //第二个参数是pluginManager的引用 //第三个是插件所执行的方法 $pluginManager->register('demo', $this, 'say_hello'); } function say_hello() { echo 'Hello World'; } }
L'étape suivante est celle où l'appel du plug-in est déclenché. Par exemple, si je veux mettre say_hello sur la page d'accueil de mon blog, Index.php, alors vous écrivez quelque part dans index.php. :
$pluginManager->trigger('demo','');
Le premier paramètre représente le nom du hook, et le deuxième paramètre est le paramètre d'entrée de la méthode correspondante du plug-in Puisqu'il n'y a pas de paramètres d'entrée dans cet exemple, c'est le cas. vide.
Un tel exemple exprime fondamentalement clairement la méthode de mise en œuvre et la logique du mécanisme de plug-in « hook ».
Recommandations associées :
Explication détaillée de la bibliothèque de fonctions BC d'opération de haute précision PHP
Explication détaillée de la base de données d'exploitation PHP basée sur ORM
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

L'article traite des objets de données PHP (PDO), une extension pour l'accès à la base de données dans PHP. Il met en évidence le rôle de PDO dans l'amélioration de la sécurité grâce à des instructions préparées et à ses avantages sur MySQLI, y compris l'abstraction de la base de données et une meilleure gestion des erreurs.

MemCache et Memcached sont des systèmes de mise en cache PHP qui accélèrent les applications Web en réduisant la charge de base de données. Une seule instance peut être partagée entre des projets avec une gestion clé.

L'article traite des étapes pour créer et gérer les bases de données MySQL à l'aide de PHP, en se concentrant sur la connexion, la création, les erreurs courantes et les mesures de sécurité.

L'article explique comment JavaScript et PHP interagissent indirectement via les demandes HTTP en raison de leurs différents environnements. Il couvre les méthodes pour l'envoi de données de JavaScript à PHP et met en évidence des considérations de sécurité comme la validation des données et le prot

Pear est un cadre PHP pour les composants réutilisables, l'amélioration du développement avec la gestion des packages, les normes de codage et le soutien communautaire.

PHP est un langage de script polyvalent utilisé principalement pour le développement Web, la création de pages dynamiques, et peut également être utilisé pour les scripts en ligne de commande, les applications de bureau et le développement d'API.

L'article traite de l'évolution de PHP des "outils personnels de la page d'accueil" en 1995 à "PHP: Hypertext Preprocessor" en 1998, reflétant son utilisation élargie au-delà des sites Web personnels.

Des méthodes efficaces pour empêcher les attaques fixes de session incluent: 1. Régénérer l'ID de session après que l'utilisateur se connecte; 2. Utilisez un algorithme de génération d'ID de session sécurisé; 3. Mettre en œuvre le mécanisme de délai d'expiration de la session; 4. Cryptez les données de session à l'aide de HTTPS. Ces mesures peuvent garantir que l'application est indestructible lorsqu'il est confronté à des attaques fixes de session.


Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Version crackée d'EditPlus en chinois
Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

MinGW - GNU minimaliste pour Windows
Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

mPDF
mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

DVWA
Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel
