【发布时间】:2014-08-06 20:50:57
【问题描述】:
这可能根本不是一个真正的问题,但我想知道为什么会这样。
代码按照我在此处发布的方式运行。
我有一个这样的 Database() 类:
class Database extends PDO
{
public function __construct()
{
$options = array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING);
parent::__construct(DB_TYPE . ':host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=utf8', DB_USER, DB_PASS, $options);
}
}
这个类通过控制器调用:
class Controller
{
function __construct()
{
Session::init();
if (!isset($_SESSION['user_logged_in']) && isset($_COOKIE['rememberme'])) {
header('location: ' . URL . 'login/loginWithCookie');
}
try {
$this->db = new Database();
} catch (PDOException $e) {
die('Database connection could not be established.');
}
$this->view = new View();
}
}
注意这里调用了 Database() 类。
现在,我有一个“模型”,它需要数据库连接才能与数据库通信:
class Notes extends Controller
{
public function __construct()
{
parent::__construct();
}
public static function getSumNotes()
{
$sql = "SELECT COUNT(*) FROM table WHERE user_id = :user_id";
$query = new Database();
$query = $query->prepare($sql);
$query->execute(array(':user_id' => $_SESSION['user_id']));
return $query->fetchColumn();
}
}
让我恼火的是:方法 Notes::getSumNotes() 调用另一个新的 Database() 类,这是从表中获取我的值所必需的。没有这个连接将无法工作。
问题:为什么我必须调用 Database() 类两次,尽管来自 Notes 的 parent::__construct() 从“dads”(控制器)类中获取相同的变量和构造函数?
希望得到启发。
谢谢。
【问题讨论】:
-
声明
protected $db,然后在你的父类中使用return $this->db;,当然在你的notes类中使用private $db。 -
您应该将全局数据库连接传递给您的
Controller类及其子类;现在您为您创建的每个对象打开一个数据库连接。在对象本身中,您应该能够使用$this->db -
@Ohgodwhy:不工作。当我
var_dump()或print_r()out$this->db时,什么也没有发生。它在我的屏幕上没有显示任何数组。 -
@jeroen:我通过了一个全局数据库连接并在我的 Notes 类中写了这个:
$query = $this->db->prepare($sql);如果这是正确的,它仍然无法正常工作。
标签: php class pdo constructor parent