Rumah php教程 php手册 CodeIgniter源码阅读(6)Hook.php 扩展框架的实现原理

CodeIgniter源码阅读(6)Hook.php 扩展框架的实现原理

Jun 06, 2016 pm 07:52 PM
codeigniter Kembangkan Kod sumber membaca

看了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;
    }

}
?>
Salin selepas log masuk

挂钩点可以挂多个hook,所以,当我们想扩展ci的时候,只需要将hook文件放到APPPATH文件夹下,然后
到APPPATH/config/hook.php中声明定义的hook的信息即可。那么系统运行到挂钩点的时候,会自动调用声明的hook。
如此一来便实现了可扩展性

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Dari awal hingga akhir: Cara menggunakan cURL sambungan php untuk membuat permintaan HTTP Dari awal hingga akhir: Cara menggunakan cURL sambungan php untuk membuat permintaan HTTP Jul 29, 2023 pm 05:07 PM

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

Sambungan dan modul pihak ketiga untuk fungsi PHP Sambungan dan modul pihak ketiga untuk fungsi PHP Apr 13, 2024 pm 02:12 PM

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.

Bagaimana untuk melaksanakan perisian tengah tersuai dalam CodeIgniter Bagaimana untuk melaksanakan perisian tengah tersuai dalam CodeIgniter Jul 29, 2023 am 10:53 AM

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

Bagaimana untuk memasang sambungan mbstring di bawah CENTOS7? Bagaimana untuk memasang sambungan mbstring di bawah CENTOS7? Jan 06, 2024 pm 09:59 PM

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

Cara menggunakan Microsoft Reader Coach dengan Immersive Reader Cara menggunakan Microsoft Reader Coach dengan Immersive Reader Mar 09, 2024 am 09:34 AM

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

Perisian tengah CodeIgniter: Mempercepatkan responsif aplikasi dan pemaparan halaman Perisian tengah CodeIgniter: Mempercepatkan responsif aplikasi dan pemaparan halaman Jul 28, 2023 pm 06:51 PM

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 Cara menggunakan sambungan Aurora Push untuk melaksanakan fungsi push mesej kelompok dalam aplikasi PHP Jul 25, 2023 pm 08:07 PM

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).

Cara menggunakan pembina pertanyaan pangkalan data (Pembina Pertanyaan) dalam rangka kerja CodeIgniter Cara menggunakan pembina pertanyaan pangkalan data (Pembina Pertanyaan) dalam rangka kerja CodeIgniter Jul 28, 2023 pm 11:13 PM

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

See all articles