CodeIgniter中调用null对象的CheckUser()方法报错及代码咨询
错误原因分析
这个错误 Call to a member function CheckUser() on null 本质是你尝试调用一个null对象的方法——具体来说就是 $this->MUser 是null,所以调用它的 CheckUser() 方法时直接触发了报错。
为什么 $this->MUser 会是null?看你Login控制器的构造函数就能找到问题:
public function _construct() { parent::_construct(); $this->load->model('MUser'); }
这里有个致命的语法错误:PHP类的构造函数必须是两个下划线开头的 __construct(),你只写了一个下划线!这就导致这个构造函数根本不会被PHP自动执行,父类 CI_Controller 的构造逻辑也没触发,CodeIgniter的模型加载器等核心组件都没初始化,自然无法加载MUser模型,$this->MUser就成了null。
另外从你贴的validasi方法代码片段来看,你还写了$this->form_va...,这里明显是$this->form_validation的拼写错误,不过这是次要问题,先解决构造函数的核心问题再说。
解决方案
只需要修正构造函数的名字,把单下划线改成双下划线,确保构造函数被正确执行:
public function __construct() { // 这里改成两个下划线 parent::__construct(); $this->load->model('MUser'); }
这样做之后,父类的构造会正常运行,CI的模型加载器会初始化,$this->MUser就能成功加载对应的模型类,调用CheckUser()方法就不会再报错了。
顺便把validasi方法里的拼写错误也修正,把$this->form_va...补全为$this->form_validation,避免后续出现新的错误。
内容的提问来源于stack exchange,提问作者wisnu
相关产品推荐
相关产品推荐

