【问题标题】:Controller - Model in CodeIgniter and "Undefined property"控制器 - CodeIgniter 中的模型和“未定义的属性”
【发布时间】:2016-02-17 18:09:54
【问题描述】:
<?php
class Success_model extends CI_Model
{
    function __construct()
    {
        // Call the Model constructor
        parent::__construct();
    }

    //insert into user table
    function get_all()
    {
        $query = $this->db->get('session'); // = select * from session
        return $query->result();
    }

}
<?php 
class Success extends CI_Controller
{

     public function __construct()
     {
        parent::__construct();
        $this->load->library('session');
        $this->load->helper('url');
        $this->load->model('success_model');
    }

     public function index()
     {
        $data= $this->Success_model->get_all();
        $this->load->view('success_view', $data);     
      }
}
?>

如您所见,这很好,但我有错误:

A PHP Error was encountered

Severity: Notice

Message: Undefined property: Success::$Success_model

Filename: controllers/success.php

Line Number: 15

Backtrace:

File: C:\xampp\htdocs\session\application\controllers\success.php
Line: 15
Function: _error_handler

File: C:\xampp\htdocs\session\index.php
Line: 292
Function: require_once


Fatal error: Call to a member function get_all() on null in C:\xampp\htdocs\session\application\controllers\success.php on line 15
A PHP Error was encountered

Severity: Error

Message: Call to a member function get_all() on null

Filename: controllers/success.php

Line Number: 15

Backtrace:

我在看,在看,但我不知道什么是坏的。好的目录是文件,其他类正在工作,但不是。

请帮忙。我只是累了,因为在搜索错误 2 小时后...

【问题讨论】:

  • 嗯,你的 success 控制器甚至没有 22 行...我的想象力通常是一流的,但不幸的是我无法想象神秘的行 #22
  • 我的错误,抱歉,我已修复

标签: php codeigniter


【解决方案1】:

对于 CI v3,afaik


我想我看到了:

$data= $this->Success_model->get_all();

应该是:

$data = $this->success_model->get_all(); // Notice the lowercase success_model

PHP 变量区分大小写,而函数和类名则不区分。


另一种解决方案是改变

$this->load->model('success_model');

进入

$this->load->model('Success_model');

因为这样你就可以使用

$data= $this->Success_model->get_all();

【讨论】:

  • 但是如果是 Success_model 类,为什么我应该在这里使用 success_model(这行得通)这对我来说不合逻辑
  • 这一切都归结为 PHP 中的类名和函数名不区分大小写,因此 CodeIgniter 在幕后基本上就是这样做的$this-&gt;{strtolower($model_name)} = new success_model();。如果您想了解细节,可以查看/system/core/loader.php 并查找function model()。但是,类属性(也称为变量)区分大小写。
  • 虽然相应地使用每个(大写或小写)可以加载模型文件,但如果只使用小写,则可以加载库文件。我在自己的代码中区分了我总是使用大写的模型 $this->load->model('Some_m');$this->Some_m->some_method();对于库小写 $this->load->library('some_lib');$this->some_lib->some_method();.
  • @Tpojka 我已经更新了我的答案以反映您的评论,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多