get_instance() 对象在钩子中赋值, 但是无法在其他地方获取。

问题

get_instance() 对象在钩子中赋值, 但是无法在其他地方获取。

原因

pre_system,pre_controller的钩子是在超级对象之前执行,所以get_instance()无效

解决方法

  1. 使用 post_controller_constructor 代替
  2. 使用 _call_hook 和 call_hook方法

钩子扩展知识

pre_system 在系统执行的早期调用,这个时候只有 基准测试类 和 钩子类 被加载了, 还没有执行到路由或其他的流程。
pre_controller 在你的控制器调用之前执行,所有的基础类都已加载,路由和安全检查也已经完成。
post_controller_constructor 在你的控制器实例化之后立即执行,控制器的任何方法都还尚未调用。
post_controller 在你的控制器完全运行结束时执行。
display_override 覆盖 _display() 方法,该方法用于在系统执行结束时向浏览器发送最终的页面结果。 这可以让你有自己的显示页面的方法。注意你可能需要使用$this->CI =& get_instance() 方法来获取 CI 超级对象,以及使用$this->CI->output->get_output()方法来 获取最终的显示数据。
cache_override 使用你自己的方法来替代 输出类 中的 _display_cache()方法,这让你有自己的缓存显示机制。
post_system 在最终的页面发送到浏览器之后、在系统的最后期被调用。

参考资料

  • CodeIgniter: Hooks (pre_controller) loading helpers

你可能感兴趣的:(php,技术)