用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5580|回复: 11
收起左侧

[HELP] 在控制器里同时导入两个类出现的异常问题

[复制链接]
发表于 2011-8-4 09:44:40 | 显示全部楼层 |阅读模式
本帖最后由 neo76 于 2011-8-4 10:16 编辑

在控制器里
PHP复制代码
$this->load->library(array('admin/admin','admin/session'));
复制代码
这样导入两个类, admin类使用正常,但使用session类时显示
  1. ----------------------------------------------------
  2. A PHP Error was encountered
  3. Severity: Notice
  4. Message: Undefined property: Main::$session
  5. Filename: admin/main.php
  6. Line Number: 10
  7. ----------------------------------------------------
复制代码

Fatal error: Call to a member function aaa() on a non-object ;
aaa()是session类里的一个方法, 把aaa放在session类里的构造函数里可以输出信息,说明session类已被执行, 但在控制器里 $this->session->aaa(); 就会出现上面描述的问题,有谁遇到过类似的问题么?ps) 同时导入的类中 admin类使用正常



4.jpg
3.jpg
2.jpg
1.jpg
发表于 2011-8-4 10:41:27 | 显示全部楼层
本帖最后由 visvoy 于 2011-8-4 10:42 编辑

请仔细阅读CI关于命名规范的手册
class CI_Admin
class CI_Session
还有library不能继承CI_Controller
 楼主| 发表于 2011-8-4 10:49:33 | 显示全部楼层
class CI_Admin
class CI_Session
这两个是自定义导入的类。

关于“还有library不能继承CI_Controller”, 我刚自己测试时把两个类的所有信息都删除后就各自留下了一个方法,测试范县没问题,所以还是怀疑我自身的问题。 谢谢你的提醒。
发表于 2011-8-4 10:51:29 | 显示全部楼层
只要你用->load->library()加载的类,他必须是CI_开头,不然CI不会创建这个类的实例
 楼主| 发表于 2011-8-4 11:01:58 | 显示全部楼层
visvoy 发表于 2011-8-4 10:51
只要你用->load->library()加载的类,他必须是CI_开头,不然CI不会创建这个类的实例 ...

有这事? CI_ 开头不是替换原始类时命名的么?

我的会话类是我自己单独写的,跟CI的会话是没关系的。
发表于 2011-8-4 11:03:48 | 显示全部楼层
但你是在CI框架下面用CI的load->library()加载他,这时必须遵守CI的library class命名规范
 楼主| 发表于 2011-8-4 11:17:40 | 显示全部楼层
嗯,明白你的意识了。

就跟你说的library不能继承CI_Controller这个问题。
本想少写 $ci =& get_instance();  和 $this->CI 让类继承 Controller 没想到还有这事,,,

谢谢~~
发表于 2011-8-4 13:00:59 | 显示全部楼层
visvoy 发表于 2011-8-4 11:03
但你是在CI框架下面用CI的load->library()加载他,这时必须遵守CI的library class命名规范 ...

【反对】
好像不是这样吧。。。
只有扩展核心类才需要。。。。
发表于 2011-8-4 14:40:59 | 显示全部楼层
library里面的自定义类可以不用写CI_前缀 也可以正常加载的.
发表于 2012-4-13 09:05:29 | 显示全部楼层
呵呵
还真有人用这个编辑器!

本版积分规则