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 在最终的页面发送到浏览器之后、在系统的最后期被调用。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值