http://www.dmbremen.com

                                                                  【一分11选5网址】php钩子原理是什么-PHP问题

                                                                  钩子原理很简单,有些人把事情弄的过于发杂,其实就是调用某个目录下的比如/hook目录下注册在hook函数里面和读取hook配置文件里面的类的方法的一个调用类的方法的功能。

                                                                  目的就是最少改动代码,改动旧功能,或者增加一些新功能,或者简单说成调用函数都行。

                                                                  但是读取hook的配置文件,还是需要在系统的里面每次都需要读取,其实就失去了hook的意义,建议只做钩子本身的就好。

                                                                  相关推荐:《PHP入门教程》

                                                                  参看一下ci的hook,仅截取hook函数核心部分。

                                                                  <?php protected function _run_hook($data) {        // Closures/lambda functions and array($object, 'method') callables        if (is_callable($data)) {            is_array($data) ? $data[0]->{$data[1]}() : $data();            return TRUE;        } elseif (!is_array($data)) {            return FALSE;        }        if ($this->_in_progress === TRUE) {            return;        }        if (!isset($data['filepath'], $data['filename'])) {            return FALSE;        }        $filepath = APPPATH . $data['filepath'] . '/' . $data['filename'];        if (!file_exists($filepath)) {            return FALSE;        }        $class = empty($data['class']) ? FALSE : $data['class'];        $function = empty($data['function']) ? FALSE : $data['function'];        $params = isset($data['params']) ? $data['params'] : '';        if (empty($function)) {            return FALSE;        }        // Set the _in_progress flag        $this->_in_progress = TRUE;        // Call the requested class and/or function        if ($class !== FALSE) {            // The object is stored?            if (isset($this->_objects[$class])) {                if (method_exists($this->_objects[$class], $function)) {                    $this->_objects[$class]->$function($params);                } else {                    return $this->_in_progress = FALSE;                }            } else {                class_exists($class, FALSE) OR require_once($filepath);                if (!class_exists($class, FALSE) OR ! method_exists($class, $function)) {                    return $this->_in_progress = FALSE;                }                // Store the object and execute the method                $this->_objects[$class] = new $class();                 $this->_objects[$class]->$function($params);             // 核心部分 读取参数部分,去实例化类调用方法 传递参数  其实这也是MVC url路由实现的核心,现在很多//都是使用 call_user_func_array  call_user_func 这两个方法            }        } else {            function_exists($function) OR require_once($filepath);            if (!function_exists($function)) {                return $this->_in_progress = FALSE;            }            $function($params);        }        $this->_in_progress = FALSE;        return TRUE;    }
                                                                                  

                                                                  郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

                                                                  上一篇:荣耀手机正式官宣:“现男友”李现为新代言人 - 荣耀20 PRO冰岛幻境
                                                                  下一篇:没有了