我有
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
为什么?
您正在使用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)