通过静态方法使用CodeIgniter库

时间:2012-09-03 20:31:37

标签: php codeigniter

我在我的静态函数中尝试调用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();
    }

}

4 个答案:

答案 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()'

希望这会有所帮助。 第一次撰稿人:)