Php Codeigniter在静态函数中加载库

Php Codeigniter在静态函数中加载库,php,model,codeigniter-2,Php,Model,Codeigniter 2,在我的users_模型中有一个静态函数,名为isLoggedin(),它需要我创建的库。我装不动了!它位于libraries文件夹中,名为SessionHelper.php,其中有一个类SessionHelper(我知道这并不奇怪)。我试着用$this->load->library('sessionHelper')在静态函数中加载它,结果发现我不能在静态函数中使用$this。然后我尝试使用require\u once'../libraries/sessionHelper.php'加载它,但它不起

在我的users_模型中有一个静态函数,名为isLoggedin(),它需要我创建的库。我装不动了!它位于libraries文件夹中,名为SessionHelper.php,其中有一个类SessionHelper(我知道这并不奇怪)。我试着用
$this->load->library('sessionHelper')
在静态函数中加载它,结果发现我不能在静态函数中使用$this。然后我尝试使用
require\u once'../libraries/sessionHelper.php'
加载它,但它不起作用,然后我尝试了autoloader,它也不起作用。。。。这里是函数

public static function isLoggedin() {
        if (SessionsHelper::get('id') != '' && SessionsHelper::get('id') >= 0) { // TODO add logic to differentiate between user/admin
            return true;
        }
        return false;
    }
我只需要能够使用图书馆!请任何帮助都将非常感激

编辑: 控制器是:

class Users extends CI_Controller{

    public function login(){
        $this->load->model('users_model');

        if($this->users_model->isLoggedin()){
            redirect($this->config->base_url);
        }

        $data['info'] = $this->users_model->login('slavigne@uark.edu', 'abcdefg');

        $this->load->view('templates/header');
        $this->load->view('users/login', $data);
        $this->load->view('templates/footer');
    }

    public function logout(){
        $this->load->library('SessionHelper');
        SessionsHelper::destroy();
    }
}
模型是:

class users_model extends CI_Model{
    public function users_model(){
            parent::__construct();
    }

    public static function hash($password, $salt) {
//this code works no problem! but it's private you know?
    }

    public static function isLoggedin() {
        $CI =& get_instance();
        $CI->load->library('SessionsHelper');
        if (SessionsHelper::get('id') != '' && SessionsHelper::get('id') >= 0) { // TODO add logic to differentiate between user/admin
            return true;
        }
        return false;
    }

    public function login($email, $password){
        $this->load->library('SessionHelper');
        $this->load->database();
        $query = $this->db->get_where('users', array('email' => $email));
        $result = $query->result();
        if($result[0]->password == $this->hash($password, $result[0]->salt)){
            //error_log("Pass matched!");
            SessionHelper::set('id', $result[0]->id);
        }        
        return $result[0];
    }
}
该库位于application/libraries/sessionhelp.php中:

class Sessionshelper {
        public function __construct() {      
    }

    public static function start() {
        if (!session_id()) {
            session_start();
        }
    }

    public static function set($fld, $val) {
        self::start();
        $_SESSION[$fld] = $val;
    }

    public static function un_set($fld) {
        self::start();
        unset($_SESSION[$fld]);
    }

    public static function destroy() {
        if (session_id() != "" || isset($_COOKIE[session_name()])) {
            $params = session_get_cookie_params();
            setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);
        }
        session_unset();
        $_SESSION = array();
        session_destroy();
    }

    public static function get($fld) {
        self::start();
        if (isset($_SESSION[$fld])) {
            return $_SESSION[$fld];
        }
        return FALSE;
    }
}

通过使用
get\u instance
加载全局可访问的CodeIgniter实例,可以在静态上下文中加载任何库,从而产生:

$CI =& get_instance();
$CI->load->library('SessionHelper');

但是,社区通常认为静态方法几乎不可测试,尤其是在使用CodeIgniter这样的框架时,设计的味道会让你避免使用它。

但是如果我不这样做,那么如果我需要使用该方法,那么我必须重新加载整个类,对吗?@Samuraisolification,如果您在action方法中加载了一次类,那么在方法的块结束之前您是可以的。是的,但是如果我需要使用此函数,并且我以前没有加载过模型,那么情况会怎样?这不起作用,它仍然说,无法加载请求的类:sessionhelper@Samuraisoulification,您是否正确地将SessionHelper大写了?您确定该文件的大写字母正确吗?您确定类名的大写字母正确吗?您确定文件存在吗?您可以将isLoggedIn()函数缩短为
返回(sessionHelper::get('id')!=''&&sessionHelper::get('id')>=0)
。此外,保护密码不应取决于哈希算法,而应取决于算法的强度。你没有试着用你自己的密码,是吗?