Jadual Kandungan
回复内容:
Rumah pembangunan bahagian belakang tutorial php phpwind - php中hook是什么意思

phpwind - php中hook是什么意思

Jun 06, 2016 pm 08:31 PM
hook php

在看phpwind源码的时候时常碰到hook
但是搜索了蛮久之后仍然对这个东西一点头绪没有
希望有了解这个的前辈能给一个比较详细的解释或者相关的链接

回复内容:

在看phpwind源码的时候时常碰到hook
但是搜索了蛮久之后仍然对这个东西一点头绪没有
希望有了解这个的前辈能给一个比较详细的解释或者相关的链接

在脚本结束时关闭MySQL数据库连接:

<code><?php function close_db($app, $mysqli) {
    if (!$app['db_pconnect']) {
        if (isset($mysqli)) $mysqli->close();
    }
}
register_shutdown_function('close_db', $app, $mysqli);
</code>
Salin selepas log masuk

register_shutdown_function就是一个hook钩子性质的函数,作用是:在特定事件发生时(脚本关闭)触发某些操作(调用close_db函数关闭数据库).

比如你要做一个评论敏感词过滤插件,你就应该在评论输出时(事件),调用你的过滤函数(钩子函数),然后继续输出评论.WordPress中的add_filter/add_action函数就是用来实现钩子的.

PHP实现钩子和插件系统
http://stackoverflow.com/questions/8336308/how-to-do-a-php-hook-system

<code>/**
 * Attach (or remove) multiple callbacks to an event and trigger those callbacks when that event is called.
 * 绑定或移除多个回调函数到事件,当事件被调用时触发回调函数.
 *
 * @param string $event name
 * @param mixed  $value the optional value to pass to each callback
 * @param mixed  $callback the method or function to call - FALSE to remove all callbacks for event
 */
function event($event, $value = NULL, $callback = NULL) {
    static $events;
    if($callback !== NULL) {
        if($callback) {
            $events[$event][] = $callback; // 添加事件
        } else {
            unset($events[$event]); // 移除事件里所有的回调函数
        }
    } else if(isset($events[$event])) {
        foreach($events[$event] as $function) {
            $value = call_user_func($function, $value); // 调用事件
        }
        return $value;
    }
}
// 添加事件
event('filter_text', NULL, function($text) { return htmlspecialchars($text); });
event('filter_text', NULL, function($text) { return nl2br($text); });
// 移除事件里所有的回调函数
// event('filter_text', NULL, FALSE);
// 调用事件
$text = event('filter_text', $_POST['text']);
</code>
Salin selepas log masuk

HOOK就是钩子,也是drupal与wordpress的核心机制。其实相当于事件绑定,你在某个地方挂了钩,你就可以在别的地方注入代码。

这个我遇到的一般是用来表示插件的。

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

Tag artikel 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)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Tarikh dan Masa CakePHP

Konfigurasi Projek CakePHP Konfigurasi Projek CakePHP Sep 10, 2024 pm 05:25 PM

Konfigurasi Projek CakePHP

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Muat naik Fail CakePHP

Penghalaan CakePHP Penghalaan CakePHP Sep 10, 2024 pm 05:25 PM

Penghalaan CakePHP

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

Bincangkan CakePHP

Panduan Ringkas CakePHP Panduan Ringkas CakePHP Sep 10, 2024 pm 05:27 PM

Panduan Ringkas CakePHP

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP

See all articles