php – 如何在CodeIgniter中为多个钩子使用相同的对象?
发布时间:2020-12-13 17:48:06 所属栏目:PHP教程 来源:网络整理
导读:我有以下钩子配置(在hooks.php中) $hook['post_controller_constructor'][] = array( 'class' = 'MY_DataCollection','function' = 'init','filename' = 'MY_DataCollection.php','filepath' = 'hooks');$hook['post_controller'][] = array( 'class' = 'MY_
我有以下钩子配置(在hooks.php中)
$hook['post_controller_constructor'][] = array( 'class' => 'MY_DataCollection','function' => 'init','filename' => 'MY_DataCollection.php','filepath' => 'hooks' ); $hook['post_controller'][] = array( 'class' => 'MY_DataCollection','function' => 'post_controller','filepath' => 'hooks' ); 我想要做的是在post_controller_constructor中实例化类,然后运行init方法.然后为post_controller运行post_controller但使用相同的实例.然而,CodeIgniter再次实例化该类. 接下来我尝试了一些我认为有点聪明的东西: require_once APPPATH . 'hooks/MY_DataCollection.php'; $collection = new MY_DataCollection; $hook['post_controller_constructor'][] = array( 'function' => array($collection,'init'),'filepath' => 'hooks' ); $hook['post_controller'][] = array( 'function' => array($collection,'post_controller'),'filepath' => 'hooks' ); 这不起作用,因为CI中的钩子类确实需要,我得到: Fatal error: Cannot redeclare class MY_DataCollection in /var/www/application/hooks/MY_DataCollection.php on line 7 所以我摆脱了文件路径信息: require_once APPPATH . 'hooks/MY_DataCollection.php'; $collection = new MY_DataCollection; $hook['post_controller_constructor'][] = array( 'function' => array($collection,'init') ); $hook['post_controller'][] = array( 'function' => array($collection,'post_controller') ); 甚至没有尝试运行,因为在CI_Hooks类中有_run_hook中的这个检查: if ( ! isset($data['filepath']) OR ! isset($data['filename'])) { return FALSE; } 我想我将不得不通过扩展这个类来覆盖这个函数,但我不能相信之前没有遇到过这种情况,并且没有任何更简单的方法来解决它. 谢谢 解决方法
嗯,似乎你需要在某处存储所需类的实例.
也许你可以这样做: class MyHooks { public static $object_you_need; public function init() { $object = new MyObject(); $object->init(); self::$object_you_need = $object; } public function post_controller() { $object = self::$object_you_need; // do stuff with that object } } 不觉得漂亮,但我认为它有效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |