Maison > cadre php > PensezPHP > méthode d'implémentation du hook thinkphp

méthode d'implémentation du hook thinkphp

Libérer: 2020-04-20 09:09:39
avant
3080 Les gens l'ont consulté

Hook est un mécanisme de déclenchement, comme un piège. Lorsque le programme s'exécute à un certain endroit, le piège sera déclenché, puis le Hook sera exécuté une fois l'exécution terminée, le système continuera en fonction des différents. résultats de l'exécution.

méthode d'implémentation du hook thinkphp

Le framework appelle la méthode d'importation dans la classe Hook dans la méthode ThinkThink->start() : la valeur par défaut est le fichier de configuration dans Modelcommon. php, quel fichier définit l'extension de comportement.

méthode dimplémentation du hook thinkphp

2. Surveillez le comportement de la balise via la méthode Hook:listen() Définissez un tableau de balises dans la classe Hook : la balise est. key ; le comportement de comportement est la valeur .Exécutez le plug-in de comportement marqué via Hook:exec().

 /**
     * 监听标签的插件
     * @param string $tag 标签名称
     * @param mixed $params 传入参数
     * @return void
     */
    static public function listen($tag, &$params=NULL) {
        if(isset(self::$tags[$tag])) {
            if(APP_DEBUG) {
                G($tag.'Start');
                trace('[ '.$tag.' ] --START--','','INFO');
            }
            foreach (self::$tags[$tag] as $name) {
                APP_DEBUG && G($name.'_start');
                $result =   self::exec($name, $tag,$params);
                if(APP_DEBUG){
                    G($name.'_end');
                    trace('Run '.$name.' [ RunTime:'.G($name.'_start',$name.'_end',6).'s ]','','INFO');
                }
                if(false === $result) {
                    // 如果返回false 则中断插件执行
                    return ;
                }
            }
            if(APP_DEBUG) { // 记录行为的执行日志
                trace('[ '.$tag.' ] --END-- [ RunTime:'.G($tag.'Start',$tag.'End',6).'s ]','','INFO');
            }
        }
        return;
    }

    /**
     * 执行某个插件
     * @param string $name 插件名称
     * @param string $tag 方法名(标签名)     
     * @param Mixed $params 传入的参数
     * @return void
     */
    static public function exec($name, $tag,&$params=NULL) {
            if('Behavior' == substr($name,-8) ){
            // 行为扩展必须用run入口方法
            $tag    =   'run';
        }
        $addon   = new $name();
        return $addon->$tag($params);
    }
Copier après la connexion

Tutoriel recommandé : tutoriel thinkphp

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal