【发布时间】:2015-01-12 21:40:41
【问题描述】:
我有一个简单的类,用户需要访问数据库。我还需要在其他几个类中访问数据库,所以我的 class.user.php 看起来像这样:
include "config.php"
class User {
public $db;
public function __construct(PDO $db){
$this->db = $db;
global $db;
}
function LastLogin(){
// global $db; // if I uncomment this, it works for this function.
$pdo = $db->prepare("SELECT last_login FROM users WHERE username = ?");
$pdo->execute(array($username));
while($r = $pdo->fetchObject()){
echo $r->last_login;
}
}
}
Config.php 看起来像这样:
$dsn = "mysql:host=localhost;dbname=db;charset=utf8";
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$db = new PDO($dsn,'user','pass', $opt);
假设我有一个名为 userdetails.php 的页面,我想知道用户上次登录的时间。
$user = new User($db);
$user->LastLogin();
这会导致如下错误消息:
Notice: Undefined variable: db in /home/www/class.user.php on line 12
Fatal error: Call to a member function prepare() on a non-object in/home/www/class.user.php on line 12
所以我在课堂上使用 pdo 时遇到了问题。对每个函数都输入“global $db”是没有意义的,那我做错了什么?
【问题讨论】:
-
@RiggsFolly 做到了,没有明显变化。
-
你真的需要停止使用全局。它破坏了封装,这是使用 OOP 的原因之一。
-
@KevinM1 是的,我试过不使用它,但这是我让它工作的唯一方法。