You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CodeIgniter框架时遇到Undefined property及空对象方法调用错误

解决CodeIgniter中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:54:11