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

标签 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();
    }
}

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

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

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

Undefined property: View::$db

为什么?

最佳答案

您正在使用一个static 方法,它想要使用一个instance 变量。

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

我的建议是使管理方法成为非静态的并像这样使用您的代码:

$mycheck = new Check();
$mycheck->admin();

或者,如果您使用的是 php 5.4 并且想坚持使用 oneliner:

(new Check())->admin();

更新

注意:不要在构造函数中创建db类,而是注入(inject)它:

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

关于php - mysql查询的静态方法调用结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13100427/

相关文章:

php - 您如何根据访问量获得最受欢迎的商品?

.net - 什么时候应该使用结构而不是类?

php - 该服务目前不可用 Google api

php - PDO 关联数组 - 返回关联

javascript - Php magento SESSION 变量在 php 内执行 javascript 代码之前未设置

php - 需要想法 : Selecting rows in table

javascript - 在 React 中刷新页面后持久登录数据

PHP:将 MySQL 转换为 Postgresql

python - 安排训练和测试机器学习

c++ - 为什么我会收到 "void value not ignored as ought to be"错误?