使用CodeIgniter框架时遇到Undefined property及空对象方法调用错误
Undefined property: Login::$U_Model错误 这个错误的核心原因很明确:你的Login控制器没有正确加载U_Model模型,导致$this->U_Model是null,调用loginf()方法时自然触发"Call to a member function on null"的错误。
你遇到的具体错误信息:
检测到PHP错误
严重程度:Notice
信息:Undefined property: Login::$U_Model
文件名:controllers/Login.php
行号:24回溯信息:
文件:C:\xampp\htdocs\Cmsproject\application\controllers\Login.php
行:24
函数:_error_handler
文件:C:\xampp\htdocs\Cmsproject\index.php
行:315
函数:require_once
$data=$this->U_Model->loginf($loginf['username'], $loginf['password']);检测到未捕获的异常
类型:Error
信息:Call to a member function loginf() on null
文件名:C:\xampp\htdocs\Cmsproject\application\controllers\Login.php
行号:24
你的U_Model代码本身是没问题的:
<?php class U_Model extends CI_Model { public function loginf($username,$pass){ $this->db->select('*'); $this->db->from('users'); $this->db->where('username',$username); $this->db->where('password',$pass); if($query=$this->db->get()){ return $query->row_array(); }else{ return false; } } } ?>
下面是三种可行的解决方案,按需选择:
1. 在调用模型方法前手动加载(适合单个方法使用模型的场景)
在Login控制器的登录处理方法里,先调用load->model()加载模型,再执行方法:
// 假设这是你的登录处理方法 public function login_process() { // ...获取$loginf变量的代码... // 先加载模型 $this->load->model('U_Model'); // 再调用模型方法 $data = $this->U_Model->loginf($loginf['username'], $loginf['password']); // ...后续逻辑... }
2. 在控制器构造函数中加载(适合控制器多个方法都用模型的场景)
如果Login控制器的多个方法都需要使用U_Model,可以在构造函数里一次性加载,避免重复代码:
class Login extends CI_Controller { public function __construct() { parent::__construct(); // 在构造函数中加载模型 $this->load->model('U_Model'); } public function login_process() { // ...获取$loginf变量的代码... // 直接调用模型方法即可 $data = $this->U_Model->loginf($loginf['username'], $loginf['password']); // ...后续逻辑... } // 其他需要使用U_Model的方法 public function another_method() { $this->U_Model->some_other_method(); } }
3. 全局自动加载模型(适合项目多个控制器都用模型的场景)
如果整个CMS项目很多地方都需要用到U_Model,可以配置全局自动加载,这样不用在每个控制器里手动加载:
打开application/config/autoload.php,找到$autoload['model']数组,把U_Model添加进去:
$autoload['model'] = array('U_Model');
额外检查点:
- 确认模型文件路径和命名:模型文件必须是
U_Model.php(首字母大写,和类名完全一致),并且放在application/models/目录下,CodeIgniter对文件名大小写敏感(尤其是在Linux服务器上)。 - 确认数据库连接正常:虽然这个错误不是数据库问题,但如果后续调用模型时数据库连接失败,也会有其他错误,你可以检查
application/config/database.php里的数据库配置是否正确。
内容的提问来源于stack exchange,提问作者Usman Afzal

