這可能不是一個真正的問題,但我想知道爲什麼這會起作用。說明:調用父:: _構造,兩個數據庫()類
代碼工作方式我在這裏發佈。
我有一個數據庫()類這樣的:
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();
}
}
通知數據庫()類被稱爲這裏。現在
,我有一個「模式」,這需要數據庫連接與數據庫進行通信:
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();
}
}
這讓我惱火的事情:方法註釋:getSumNotes()調用另一個新Database()類,它是從表中獲取我的值所必需的。沒有這個連接就無法工作。
問題:爲什麼我必須調用Database()類兩次,儘管Notes中的parent :: __ construct()從「dads」(Controller)類獲得了相同的變量和構造函數?
希望得到啓發。
謝謝。
declare'protected $ db'然後在你的父類中使用'return $ this-> db;',在'notes'類中使用'private $ db'。 – Ohgodwhy
您應該將全局數據庫連接傳遞給Controller類和它的子類;現在您爲您創建的每個對象打開一個數據庫連接。在對象本身中,您應該可以使用'$ this-> db' – jeroen
@Ohgodwhy:無法正常工作。當我'var_dump()'或'print_r()'出'$ this-> db'時,什麼都不會發生。它顯示我的屏幕上沒有陣列。 – CRoemheld