静态方法调用mysql查询的结果

Max*_*nov 3 php mysql oop

我有

class Check
{
    public function __construct()
    {
        $this->db = new Database();
    }

    public function query()
    {
        $login = Session::get("login");
        $sth = $this->db->prepare('SELECT admin FROM accounts WHERE login=:login');
        $sth->execute(array(':login' => $login));
        $result = $sth->fetch(PDO::FETCH_NUM);
        return $result[0];
    }

    public static function admin()
    {
        echo self::query();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在另一个有PDO连接的地方有数据库类.

class Database extends PDO
{
    public function __construct()
    {
        parent::__construct('mysql:host=localhost;dbname=name','root','pass');
        $this->query('SET NAMES utf8');
    }
}
Run Code Online (Sandbox Code Playgroud)

所以在Check :: admin()代码后我得到错误:

未定义的属性:View :: $ db

为什么?

Jvd*_*erg 6

您正在使用static想要使用instance变量的方法.

您的管理方法调用查询方法,查询方法使用db实例变量.由于您的类未实例化,因此该db变量不存在.

我的建议是使管理方法不是静态的,并使用你的代码:

$mycheck = new Check();
$mycheck->admin();
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是PHP 5.4并希望坚持使用oneliner:

(new Check())->admin();
Run Code Online (Sandbox Code Playgroud)

更新

注意:不要db在构造函数中创建类,而是将其注入:

public function __construct(Database $db)
{
   $this->db = $db;
}
Run Code Online (Sandbox Code Playgroud)