Apakah mekanisme pelaksanaan cangkuk pemalam thinkphp?
May 27, 2023 am 09:07 AM現(xiàn)在主流的cms或者blog等系統(tǒng)中,都內(nèi)置的有插件系統(tǒng),但是層層深入、剖析實現(xiàn)的方式,其實都是最簡單的鉤子的復(fù)雜化的實現(xiàn)。
前言
插件的執(zhí)行通過鉤子來觸發(fā);可以把插件看作掛在鉤子上的東西;插件只有在成功實現(xiàn)相應(yīng)鉤子方法并被正確安裝啟用后才能執(zhí)行。
開發(fā)者也可以用hook('test')方法在控制器只加入鉤子,讓你的應(yīng)用具有更好的擴展性;同時也可以模板里加入鉤子{:hook('footer')};鉤子也支持傳入?yún)?shù)hook('footer',array('test'=>1));
向系統(tǒng)暴露你的鉤子,就是把你的鉤子在相應(yīng)的文件里列出來,系統(tǒng)會來檢測。
{:hooks('documentDetailAfter')}
這個的意思就是:相當于在這邊 打一個點 ,我們可以將插件掛載到那
官方的說法是:文檔末尾顯示顯示的 鉤子
意思就是說,在文檔末尾的時候,會自動調(diào)用掛載在那個 鉤子 上的插件
舉例說明
php中所謂的鉤子,其實就是一種事件驅(qū)動,主要分為‘注冊事件’、‘觸發(fā)事件’兩步。所謂‘注冊事件’,即目的是給未來可能發(fā)生的'事情'起一個名字,名字,可以用單例模式或者注冊 為一個全局的變量,用的時候直接在對應(yīng)的方法或者類再或者函數(shù)中插入這個變量即可;‘觸發(fā)事件’,本質(zhì)上就是在事件的全局變量中查詢要觸發(fā)的時間名稱,然后找到注冊號的類與方法,實例化運行。
舉個例子來說明一下。
項目經(jīng)理給我們了如下的需求:
第一天:開發(fā)注冊的功能。
程序員巴拉巴拉,三下五除二就完成了。
第二天:在注冊前添加發(fā)送短信驗證碼的功能。
程序員巴拉巴拉,三峽五除二就又完成了。
第三天:注冊完成之后,給用戶添加相應(yīng)的積分。
程序員又開始巴拉巴拉ing……
class Register{ public function index(){ /** * 第二天發(fā)送短信功能 */ /** * 第一天注冊代碼 */ /** * 第三天增加積分功能 */ } }
這樣一個人開發(fā)還好,多個人開發(fā),勢必會造成配合麻煩的問題,同時代碼也會變得混亂。
作為優(yōu)秀程序員的我們,當然不容許我們程序中代碼冗余、混亂的出現(xiàn),于是我們把方法寫成函數(shù)獨立出來,方便調(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ā)人員就行了,這樣他們不用改變源碼碼就可以輕易的進行拓展。
class Register{ public function index(){ //注冊前鉤子 Hook::run('registerBefore'); /** * 注冊代碼 */ //注冊后鉤子 Hook::run('registerAfter'); } }
鉤子的簡單實現(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>'; } }
插件實現(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();
運行接口如下:
????registerBefore
????注冊完成
????registerAfter
如果要添加新的功能,程序員只要修改demo的插件就可,如果要拓展新的功能,只需要拓展registerBefore和registerAfter即可。?
Atas ialah kandungan terperinci Apakah mekanisme pelaksanaan cangkuk pemalam thinkphp?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Untuk menjalankan projek ThinkPHP, anda perlu: memasang Komposer untuk mencipta projek, masukkan direktori projek dan laksanakan php bin/console serve;

ThinkPHP mempunyai berbilang versi yang direka untuk versi PHP yang berbeza. Versi utama termasuk 3.2, 5.0, 5.1 dan 6.0, manakala versi kecil digunakan untuk membetulkan pepijat dan menyediakan ciri baharu. Versi stabil terkini ialah ThinkPHP 6.0.16. Apabila memilih versi, pertimbangkan versi PHP, keperluan ciri dan sokongan komuniti. Adalah disyorkan untuk menggunakan versi stabil terkini untuk prestasi dan sokongan terbaik.

Langkah-langkah untuk menjalankan ThinkPHP Framework secara setempat: Muat turun dan nyahzip ThinkPHP Framework ke direktori tempatan. Buat hos maya (pilihan) yang menunjuk ke direktori akar ThinkPHP. Konfigurasikan parameter sambungan pangkalan data. Mulakan pelayan web. Mulakan aplikasi ThinkPHP. Akses URL aplikasi ThinkPHP dan jalankannya.

Perbandingan prestasi rangka kerja Laravel dan ThinkPHP: ThinkPHP umumnya berprestasi lebih baik daripada Laravel, memfokuskan pada pengoptimuman dan caching. Laravel berfungsi dengan baik, tetapi untuk aplikasi yang kompleks, ThinkPHP mungkin lebih sesuai.

Langkah pemasangan ThinkPHP: Sediakan persekitaran PHP, Komposer dan MySQL. Buat projek menggunakan Komposer. Pasang rangka kerja dan kebergantungan ThinkPHP. Konfigurasikan sambungan pangkalan data. Hasilkan kod aplikasi. Lancarkan aplikasi dan lawati http://localhost:8000.

ThinkPHP ialah rangka kerja PHP berprestasi tinggi dengan kelebihan seperti mekanisme caching, pengoptimuman kod, pemprosesan selari dan pengoptimuman pangkalan data. Ujian prestasi rasmi menunjukkan bahawa ia boleh mengendalikan lebih daripada 10,000 permintaan sesaat, dan digunakan secara meluas dalam tapak web dan sistem perusahaan berskala besar seperti JD.com dan Ctrip dalam aplikasi praktikal.

Cadangan pembangunan: Cara menggunakan rangka kerja ThinkPHP untuk pembangunan API Dengan pembangunan berterusan Internet, kepentingan API (Antara Muka Pengaturcaraan Aplikasi) telah menjadi semakin menonjol. API ialah jambatan untuk komunikasi antara aplikasi yang berbeza Ia boleh merealisasikan perkongsian data, panggilan fungsi dan operasi lain, dan menyediakan pembangun kaedah pembangunan yang agak mudah dan pantas. Sebagai rangka kerja pembangunan PHP yang sangat baik, rangka kerja ThinkPHP adalah cekap, berskala dan mudah digunakan.

"Cadangan Pembangunan: Cara Menggunakan Rangka Kerja ThinkPHP untuk Melaksanakan Tugas Asynchronous" Dengan perkembangan pesat teknologi Internet, aplikasi Web mempunyai keperluan yang semakin tinggi untuk mengendalikan sejumlah besar permintaan serentak dan logik perniagaan yang kompleks. Untuk meningkatkan prestasi sistem dan pengalaman pengguna, pembangun sering mempertimbangkan untuk menggunakan tugas tak segerak untuk melaksanakan beberapa operasi yang memakan masa, seperti menghantar e-mel, memproses muat naik fail, menjana laporan, dsb. Dalam bidang PHP, rangka kerja ThinkPHP, sebagai rangka kerja pembangunan yang popular, menyediakan beberapa cara mudah untuk melaksanakan tugas tak segerak.
