0

我在尝试在静态函数中调用 CodeIgniter 方法时遇到问题,仅使用 $this 不起作用,因为它不在对象上下文中,static 关键字也不起作用。这是我的核心模型中的代码示例,$table 变量是从另一个模型(如帖子)成功定义的。

class MY_Model extends CI_Model {

    protected static $table;

    public function __construct() {
        parent::__construct();
    }

    public static function find_all() {
        $this->db->select('*');
        $sql = $this->db->get(static::$table);
        return $sql->result();
    }

}
4

4 回答 4

5

如果 $this 不起作用,您可以像这样解决这个问题:

$CI =& get_instance();
$CI->db->...
于 2012-09-03T20:42:12.617 回答
3

加载器类中内置的 codeigniter 会自动实例化该类。不支持在不实例化的情况下使用类。您可以手动将文件包含在模型文件中,然后就可以使用它。有关更多详细信息,请查看此线程: http ://codeigniter.com/forums/viewthread/73583/

于 2012-09-04T08:19:33.227 回答
0

你想要的是对类中静态变量的引用,所以使用:

class MY_Model extends CI_Model {

    protected static $table;

    public function __construct() {
        parent::__construct();
    }

    public static function find_all() {
        $this->db->select('*');
        $sql = $this->db->get(self::$table);
        return $sql->result();
    }

}

当然,$table 确实需要有一个值!

于 2012-09-03T20:38:24.583 回答
0

我相信 Codeigniter 通常不支持静态方法,它们实际上是试图将过程代码硬塞进面向对象的代码中。

无论如何,我认为您最好的选择是使用没有静态方法的类,或者将您的代码变成“帮助器”。助手只是一个老式的函数库。您可以在 helpers 文件夹下创建它,并且可以使用 $this->load->helper('helper_name') 加载它。然后,您可以像在普通程序代码中一样调用该函数,换句话说,“find_all()”

希望这可以帮助。第一次投稿:)

于 2015-05-18T22:25:07.393 回答