我的静态方法CI模型类失败了

时间:2013-09-25 00:45:22

标签: php codeigniter

好的......首先我读了这篇文章..

http://net.tutsplus.com/tutorials/php/6-codeigniter-hacks-for-the-masters/

在第一次黑客攻击中,它说我是否将这些内容包含在我的config.php文件中:

function __autoload($class) {  
    if (file_exists(APPPATH."models/".strtolower($class).EXT)) {  
        include_once(APPPATH."models/".strtolower($class).EXT);  
    }  
}  

我不需要将我的模型类扩展到CI_Model。

然后我尝试在我的模型类中使用$this->db->select('email')->from('users')->where('email', $email);。CodeIgniter告诉我找不到“db”属性。有没有人曾经尝试过这种黑客并知道如何让它发挥作用?

class User {

public $id;
public $email;
public $displayName;
public $password;

public static function search_by_email($email) {
    $user = new User;

    $user->db->select('email')->from('users')->where('email', $email);
    $query = $user->db->get();
    if ($query->num_rows()==0) {
        return false;
    }else {
        foreach ($query->result() as $key => $val) {
            $user->email = $val['email'];
            $user->displayName = $val['displayName'];
           return $user;
        }
    }
    return null;
}

当我在控制器中调用静态函数时,我使用:

        $user = User::search_by_email("xxx@gmail.com");

如果我不扩展用户,则会显示CI警告:Message: Undefined property: User::$db。如果我使用User extends CI_Model {},服务器将崩溃。

有没有人对这种情况有所了解?


编辑:

然后我抛弃了愚蠢的Nettus'教程代码,谢谢你们......但我的模型仍然无效:

class User extends CI_Model {

    public $id;
    public $email;
    public $displayName;
    public $password;
public function search_by_email($email) {

        $user = new User();

        $this->db->select('email')->from('users')->where('email', $email);
        $query = $this->db->get();
        if ($query->num_rows()==0) {
            return false;
        }else {
            foreach ($query->result() as $key => $val) {
                $user->email = $val['email'];
                $user->displayName = $val['displayName'];
               return $user;
            }
        }
        return null;
    }

在我的控制器中,我使用:

$this->load->model('User');

$user = $this->User->search_by_email("leo.niecn@gmail.com");

我的服务器仍然崩溃.....我禁止在我的模型中编写类public $id等类变量吗?

1 个答案:

答案 0 :(得分:1)

这部分代码没有任何意义:

function __autoload($class) {  
   if (file_exists(APPPATH . "models/" . strtolower($class).EXT)) {  
       include_once(APPPATH . "models/" . strtolower($class).EXT);  
   }  
}  

只要您可以从autoload.php文件夹下的config加载模型,或者在需要模型时执行以下操作:

$this->load->model('model_name');

然后只需调用你的函数。