【发布时间】:2014-10-09 11:43:55
【问题描述】:
当我尝试加载模型时,我没有遇到任何问题。代码如下(在控制器中):
applications/controllers/shortlinks.php:
public function __construct() {
parent::__construct();
$this->load->library("logged");
$this->load->model("shortlinks_logic"); //This model I'm interested in
}
例如,shortlinks_logic 模型的代码如下:
applications/models/shortlinks_logic.php
class Shortlinks_logic extends CI_Model {
public function test() {
echo "TEST";
}
}
那里也没有问题。但是,当我尝试在控制器中调用此函数时:
public function something($argument_one, $argument_two) {
$this->shortlinks_logic->test(); //Line 35 of following error
}
我收到此错误:
遇到 PHP 错误
严重性:通知
消息:未定义属性:Shortlinks::$shortlinks_logic
文件名:controllers/shortlinks.php
行号:35 致命错误:在非对象上调用成员函数 test() C:\xampp\htdocs\tools_v2\application\controllers\shortlinks.php 在第 35 行
我搜索了 StackOverflow,最终找到了 this answer,但我意识到我不想为我的控制器的每个功能都这样做,我不应该添加
$logic = new shortlinks_logic();
并调用所有内容
$logic->function();
因为我知道无论如何我都可以在加载时给模型一个别名
$this->load->model("shortlinks_logic", "logic");
并使用
$this->logic->test();
我需要在每个函数中创建一个新对象有什么原因吗?有没有办法解决这个问题?
我知道我可以自动加载所有模型,这是一个选项,但如果可能的话我想避免这种情况,因为不是每个人都可以访问所有模型并且有很多模型,所以我希望某些模型去某些用户(因此我想在控制器中加载)。
我知道这很长(道歉),所以我加粗了问题。
【问题讨论】:
-
第 35 1 行的 C:\xampp\htdocs\tools_v2\application\controllers\shortlinks.php 究竟是什么?
-
对不起,我会更新帖子以反映它是哪一行,但它是:
$this->shortlinks_logic->test();在something()控制器函数内。 @AfghanWiz -
如果模型没有指定构造函数方法,则调用父类构造函数,所以没有理由在模型中定义一个空的构造函数并调用
parent::__construct();... -
我在模型中添加了
public function __construct() { parent::__construct();},但仍然是同样的错误。 @shadyyx -
是的,这就是我所说的——在这种情况下,它完全是一段无用的代码。没有这个
public function __construct() { parent::__construct();}父类__construct()无论如何都会被调用。
标签: php codeigniter object