Quel est le mécanisme d'implémentation du hook du plug-in thinkphp??
May 27, 2023 am 09:07 AM現(xiàn)在主流的cms或者blog等系統(tǒng)中,都內(nèi)置的有插件系統(tǒng),但是層層深入、剖析實(shí)現(xiàn)的方式,其實(shí)都是最簡單的鉤子的復(fù)雜化的實(shí)現(xiàn)。
前言
插件的執(zhí)行通過鉤子來觸發(fā);可以把插件看作掛在鉤子上的東西;插件只有在成功實(shí)現(xiàn)相應(yīng)鉤子方法并被正確安裝啟用后才能執(zhí)行。
開發(fā)者也可以用hook('test')方法在控制器只加入鉤子,讓你的應(yīng)用具有更好的擴(kuò)展性;同時也可以模板里加入鉤子{:hook('footer')};鉤子也支持傳入?yún)?shù)hook('footer',array('test'=>1));
向系統(tǒng)暴露你的鉤子,就是把你的鉤子在相應(yīng)的文件里列出來,系統(tǒng)會來檢測。
{:hooks('documentDetailAfter')}
這個的意思就是:相當(dāng)于在這邊 打一個點(diǎn) ,我們可以將插件掛載到那
官方的說法是:文檔末尾顯示顯示的 鉤子
意思就是說,在文檔末尾的時候,會自動調(diào)用掛載在那個 鉤子 上的插件
舉例說明
php中所謂的鉤子,其實(shí)就是一種事件驅(qū)動,主要分為‘注冊事件’、‘觸發(fā)事件’兩步。所謂‘注冊事件’,即目的是給未來可能發(fā)生的'事情'起一個名字,名字,可以用單例模式或者注冊 為一個全局的變量,用的時候直接在對應(yīng)的方法或者類再或者函數(shù)中插入這個變量即可;‘觸發(fā)事件’,本質(zhì)上就是在事件的全局變量中查詢要觸發(fā)的時間名稱,然后找到注冊號的類與方法,實(shí)例化運(yùn)行。
舉個例子來說明一下。
項(xiàng)目經(jīng)理給我們了如下的需求:
第一天:開發(fā)注冊的功能。
程序員巴拉巴拉,三下五除二就完成了。
第二天:在注冊前添加發(fā)送短信驗(yàn)證碼的功能。
程序員巴拉巴拉,三峽五除二就又完成了。
第三天:注冊完成之后,給用戶添加相應(yīng)的積分。
程序員又開始巴拉巴拉ing……
class Register{ public function index(){ /** * 第二天發(fā)送短信功能 */ /** * 第一天注冊代碼 */ /** * 第三天增加積分功能 */ } }
這樣一個人開發(fā)還好,多個人開發(fā),勢必會造成配合麻煩的問題,同時代碼也會變得混亂。
作為優(yōu)秀程序員的我們,當(dāng)然不容許我們程序中代碼冗余、混亂的出現(xiàn),于是我們把方法寫成函數(shù)獨(dú)立出來,方便調(diào)用與代碼簡介。于是形成如下代碼:
class Register{ public function index(){ /** * 第二天發(fā)送短信功能 */ sendMsg($data); /** * 第一天注冊代碼 */ /** * 第三天增加積分功能 */ sendIntegral($data); } } /** * 發(fā)送短信 * @param {[type]} $data [description] * @return {[type]} [description] */ function sendMsg($data){ /* balabala */ } /** * 贈送積分 * @param {[type]} $data [description] * @return {[type]} [description] */ function sendIntegral($data){ /* balabala */ }
但是我們想要把程序開元出去讓更多的人參與,這種直接修改源碼碼的方式始終不是太好,這個時候,我們就可以使用鉤子的方式,在注冊成功前后注冊兩個鉤子,我們只需要把鉤子告訴開發(fā)人員就行了,這樣他們不用改變源碼碼就可以輕易的進(jìn)行拓展。
class Register{ public function index(){ //注冊前鉤子 Hook::run('registerBefore'); /** * 注冊代碼 */ //注冊后鉤子 Hook::run('registerAfter'); } }
鉤子的簡單實(shí)現(xiàn)代碼
目錄結(jié)構(gòu):../hook/Hook.php
鉤子核心類Hook.php:
<?php namespace hook; class Hook{ static protected $hook = []; /** * 插件注冊 * @param [type] $name [description] * @param [type] $addons [description] */ static public function add($name,$addons){ self::$hook[$name] = $addons; } /** * 插件執(zhí)行 * @param [type] $name [description] * @return [type] [description] */ static public function run($name){ if(isset(self::$hook[$name])){ $method = (new self::$hook[$name]()); call_user_func([$method,$name]); } } }
簡單的插件demo:
<?php namespace addons\demo; class Demo{ public function registerBefore(){ echo 'registerBefore'.'</br>'; } public function registerAfter(){ echo 'registerAfter'.'</br>'; } }
插件實(shí)現(xiàn)的地方,即上文的注冊的文件:
<?php namespace index\controller; use hook\Hook; class Index{ public function index(){ Hook::run('registerBefore'); echo '注冊完成'.'</br>'; Hook::run('registerAfter'); } }
入口文件index.php
<?php use index\controller\Index; spl_autoload_register('autoload'); function autoload($name){ require_once('/'.str_replace('\\','/',$name).'.php'); } //插件注冊 hook\Hook::add('registerBefore','\\addons\\demo\\Demo'); hook\Hook::add('registerAfter','\\addons\\demo\\Demo'); //調(diào)用 $index = new Index(); $index->index();
運(yùn)行接口如下:
????registerBefore
????注冊完成
????registerAfter
如果要添加新的功能,程序員只要修改demo的插件就可,如果要拓展新的功能,只需要拓展registerBefore和registerAfter即可。?
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

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

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Pour exécuter le projet ThinkPHP, vous devez?: installer Composer?; utiliser Composer pour créer le projet?; entrer dans le répertoire du projet et exécuter php bin/console serve?; visiter http://localhost:8000 pour afficher la page d'accueil.

ThinkPHP dispose de plusieurs versions con?ues pour différentes versions de PHP. Les versions majeures incluent 3.2, 5.0, 5.1 et 6.0, tandis que les versions mineures sont utilisées pour corriger les bogues et fournir de nouvelles fonctionnalités. La dernière version stable est ThinkPHP 6.0.16. Lorsque vous choisissez une version, tenez compte de la version PHP, des exigences en matière de fonctionnalités et du support de la communauté. Il est recommandé d'utiliser la dernière version stable pour de meilleures performances et une meilleure assistance.

étapes pour exécuter ThinkPHP Framework localement?: Téléchargez et décompressez ThinkPHP Framework dans un répertoire local. Créez un h?te virtuel (facultatif) pointant vers le répertoire racine ThinkPHP. Configurez les paramètres de connexion à la base de données. Démarrez le serveur Web. Initialisez l'application ThinkPHP. Accédez à l'URL de l'application ThinkPHP et exécutez-la.

Comparaison des performances des frameworks Laravel et ThinkPHP?: ThinkPHP fonctionne généralement mieux que Laravel, en se concentrant sur l'optimisation et la mise en cache. Laravel fonctionne bien, mais pour les applications complexes, ThinkPHP peut être mieux adapté.

étapes d'installation de ThinkPHP?: Préparez les environnements PHP, Composer et MySQL. Créez des projets à l'aide de Composer. Installez le framework ThinkPHP et ses dépendances. Configurez la connexion à la base de données. Générez le code de l'application. Lancez l'application et visitez http://localhost:8000.

ThinkPHP est un framework PHP hautes performances présentant des avantages tels que le mécanisme de mise en cache, l'optimisation du code, le traitement parallèle et l'optimisation des bases de données. Les tests de performances officiels montrent qu'il peut gérer plus de 10 000 requêtes par seconde et qu'il est largement utilisé dans les sites Web à grande échelle et les systèmes d'entreprise tels que JD.com et Ctrip dans les applications réelles.

Suggestions de développement?: Comment utiliser le framework ThinkPHP pour le développement d'API Avec le développement continu d'Internet, l'importance de l'API (Application Programming Interface) est devenue de plus en plus importante. L'API est un pont de communication entre différentes applications. Elle peut réaliser le partage de données, l'appel de fonctions et d'autres opérations, et offre aux développeurs une méthode de développement relativement simple et rapide. En tant qu'excellent framework de développement PHP, le framework ThinkPHP est efficace, évolutif et facile à utiliser.

"Suggestions de développement?: comment utiliser le framework ThinkPHP pour implémenter des taches asynchrones" Avec le développement rapide de la technologie Internet, les applications Web ont des exigences de plus en plus élevées pour gérer un grand nombre de requêtes simultanées et une logique métier complexe. Afin d'améliorer les performances du système et l'expérience utilisateur, les développeurs envisagent souvent d'utiliser des taches asynchrones pour effectuer certaines opérations chronophages, telles que l'envoi d'e-mails, le traitement des téléchargements de fichiers, la génération de rapports, etc. Dans le domaine de PHP, le framework ThinkPHP, en tant que framework de développement populaire, offre des moyens pratiques d'implémenter des taches asynchrones.
