CodeIgniter源码阅读(6)Hook.php 扩展框架的实现原理
看了hook.php的源码,就知道CI使用hook来进行扩展的原理了。 hook的基本知识http://codeigniter.org.cn/user_guide/general/hooks.html CI中hook的使用经历了一个:开启hook,定义hook,调用hook,执行hook的过程。 手册中已经告知了开启、定义、调用的方法
看了hook.php的源码,就知道CI使用hook来进行扩展的原理了。
hook的基本知识http://codeigniter.org.cn/user_guide/general/hooks.html
CI中hook的使用经历了一个:开启hook,定义hook,调用hook,执行hook的过程。
手册中已经告知了开启、定义、调用的方法。那么hook的实现原理是啥呢。
欢迎交流:mailto:actionbi2010@gmail.com 更多源码阅读
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class CI_Hooks { var $enabled = FALSE; //开启hook的标志,默认是关闭的。APPPATH/config/config.php中的配置也是默认关闭的,如果想使用hook,要在config.php中开启。 var $hooks = array(); //在_initialize()函数初始化的过程中将APPPATH/config/hook.php中定义的hook数组,引用到$this->hooks; var $in_progress = FALSE; //当一个hook执行的时候,会给标记 $in_process = TRUE ,是为了防止同一个hook被同时调用。 function __construct() { $this->_initialize(); log_message('debug', "Hooks Class Initialized"); } function _initialize() { //初始化hook //判断config.php中是否开启hook //include(hook.php),将文件里定义的hook数组引用到$this->hooks //$this->enable = TRUE } function _call_hook($which = '')//pre_system { //以pre_system挂钩点为例,当调用_call_hook('pre_system')时 //确保$this->enable = TRUE && 定义了$this->hooks['pre_system'] //如果是二维数组就遍历,依次_run_hook($this->hooks['pre_system'][$val]) //如果是一维数组,那么直接_run_hook($this->hooks['pre_system']) } function _run_hook($data) //$data 是传递过来的hook数组 { //$data 就是我们在APPPATH/config/hook.php 定义的hook数组 //$hook['pre_controller'] = array( // 'class' => 'MyClass', // 'function' => 'Myfunction', // 'filename' => 'Myclass.php', // 'filepath' => 'hooks', // 'params' => array('beer', 'wine', 'snacks') // ); 取出data里面的数据,加载 APPPATH.$data['filepath'].$data['filename']; 实例化钩子类,调用function。应用到示例中就是 $this->in_process = TRUE; $Hook = new MyClass(); $Hook->Myfunction($params); $this->in_process = FALSE; } } ?>
挂钩点可以挂多个hook,所以,当我们想扩展ci的时候,只需要将hook文件放到APPPATH文件夹下,然后
到APPPATH/config/hook.php中声明定义的hook的信息即可。那么系统运行到挂钩点的时候,会自动调用声明的hook。
如此一来便实现了可扩展性

Alat AI Hot

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

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

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

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)

Topik panas



Dari awal hingga akhir: Cara menggunakan cURL sambungan php untuk permintaan HTTP Pengenalan: Dalam pembangunan web, selalunya perlu untuk berkomunikasi dengan API pihak ketiga atau pelayan jauh lain. Menggunakan cURL untuk membuat permintaan HTTP ialah cara yang biasa dan berkesan. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melanjutkan cURL untuk melaksanakan permintaan HTTP dan menyediakan beberapa contoh kod praktikal. 1. Penyediaan Pertama, pastikan php telah memasang sambungan cURL. Anda boleh melaksanakan php-m|grepcurl pada baris arahan untuk menyemak

Untuk melanjutkan fungsi fungsi PHP, anda boleh menggunakan sambungan dan modul pihak ketiga. Sambungan menyediakan fungsi dan kelas tambahan yang boleh dipasang dan didayakan melalui pengurus pakej pecl. Modul pihak ketiga menyediakan fungsi khusus dan boleh dipasang melalui pengurus pakej Komposer. Contoh praktikal termasuk menggunakan sambungan untuk menghuraikan data JSON yang kompleks dan menggunakan modul untuk mengesahkan data.

Cara melaksanakan middleware tersuai dalam CodeIgniter Pengenalan: Dalam pembangunan web moden, middleware memainkan peranan penting dalam aplikasi. Ia boleh digunakan untuk melaksanakan beberapa logik pemprosesan yang dikongsi sebelum atau selepas permintaan sampai kepada pengawal. CodeIgniter, sebagai rangka kerja PHP yang popular, juga menyokong penggunaan middleware. Artikel ini akan memperkenalkan cara untuk melaksanakan perisian tengah tersuai dalam CodeIgniter dan memberikan contoh kod mudah. Gambaran keseluruhan Middleware: Middleware ialah sejenis permintaan

1.UncaughtError:Calltoundefinedfunctionmb_strlen(); Apabila ralat di atas berlaku, ini bermakna kami belum memasang sambungan mbstring 2. Masukkan direktori pemasangan PHP cd/temp001/php-7.1.0/ext/mbstring 3. Mulakan phpize(; /usr/local/bin /phpize atau /usr/local/php7-abel001/bin/phpize) arahan untuk memasang sambungan php 4../configure--with-php-config=/usr/local/php7-abel

Dalam artikel ini, kami akan menunjukkan kepada anda cara menggunakan Microsoft Reading Coach dalam Immersive Reader pada Windows PC. Ciri panduan membaca membantu pelajar atau individu berlatih membaca dan mengembangkan kemahiran literasi mereka. Anda bermula dengan membaca petikan atau dokumen dalam aplikasi yang disokong, dan berdasarkan ini, laporan bacaan anda dijana oleh alat Jurulatih Membaca. Laporan bacaan menunjukkan ketepatan bacaan anda, masa yang anda ambil untuk membaca, bilangan perkataan yang betul setiap minit dan perkataan yang anda rasa paling mencabar semasa membaca. Anda juga akan dapat mempraktikkan perkataan, yang akan membantu mengembangkan kemahiran membaca anda secara umum. Pada masa ini, hanya Office atau Microsoft365 (termasuk OneNote untuk Web dan Word untuk Kami

CodeIgniter Middleware: Mempercepatkan Responsif Aplikasi dan Gambaran Keseluruhan Pemberian Halaman: Memandangkan aplikasi web terus berkembang dalam kerumitan dan interaktiviti, pembangun perlu menggunakan penyelesaian yang lebih cekap dan berskala untuk meningkatkan prestasi dan responsif aplikasi. CodeIgniter (CI) ialah rangka kerja berasaskan PHP ringan yang menyediakan banyak ciri berguna, salah satunya ialah perisian tengah. Middleware ialah satu siri tugasan yang dilakukan sebelum atau selepas permintaan sampai kepada pengawal. Artikel ini akan memperkenalkan cara menggunakan

Cara menggunakan sambungan Aurora Push untuk melaksanakan fungsi push mesej kelompok dalam aplikasi PHP Dalam pembangunan aplikasi mudah alih, mesej push adalah fungsi yang sangat penting. Jiguang Push ialah perkhidmatan tolak mesej yang biasa digunakan yang menyediakan fungsi dan antara muka yang kaya. Artikel ini akan memperkenalkan cara menggunakan sambungan Aurora Push untuk melaksanakan fungsi push mesej kelompok dalam aplikasi PHP. Langkah 1: Daftar akaun Jiguang Push dan dapatkan kunci API Pertama, kita perlu mendaftar di tapak web rasmi Jiguang Push (https://www.jiguang.cn/push).

Pengenalan kepada kaedah menggunakan pembina pertanyaan pangkalan data (QueryBuilder) dalam rangka kerja CodeIgniter: CodeIgniter ialah rangka kerja PHP ringan yang menyediakan banyak alat dan perpustakaan yang berkuasa untuk memudahkan pembangun dalam pembangunan aplikasi web. Salah satu ciri yang paling mengagumkan ialah pembina pertanyaan pangkalan data (QueryBuilder), yang menyediakan cara ringkas dan berkuasa untuk membina dan melaksanakan pernyataan pertanyaan pangkalan data. Artikel ini akan memperkenalkan cara menggunakan Co
