我在我的静态函数中尝试调用CodeIgniter方法时遇到了麻烦,只是使用$这不起作用,因为它不在对象上下文中,静态关键字也不起作用。这是我的核心模型中的代码示例,$ table变量是从另一个模型(如posts。)成功定义的。
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();
}
}
答案 0 :(得分:5)
如果$这不起作用,你可以这样解决这个问题:
$CI =& get_instance(); $CI->db->...
答案 1 :(得分:2)
在loader类中构建的codeigniter会自动实例化该类。没有实例化就不支持使用类。您可以手动将文件包含在模型文件中,然后就可以使用它。有关更多详细信息,请查看此主题: http://codeigniter.com/forums/viewthread/73583/
答案 2 :(得分:0)
你想要的是对类中静态var的引用,所以使用:
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确实需要一个值!
答案 3 :(得分:0)
Codeigniter一般不支持我认为的静态方法,它们实际上是试图将程序代码强加到面向对象的代码中。
无论如何,我认为你最好的选择是使用没有静态方法的类,或者将你的代码变成“帮手”。助手只是一个旧学校的函数库。您可以在helpers文件夹下创建它,并且可以使用$ this-> load-> helper('helper_name')加载它。然后,您可以像在普通程序代码中一样调用该函数,换句话说就是'find_all()'
希望这会有所帮助。 第一次撰稿人:)