Судя по содержанию обоих ваших классов, у вас нет абсолютно никаких оснований вообще использовать класс Classica
, потому что вы излишне распределяете функциональную ответственность на несколько классов, когда все это можно обернуть внутри.один класс.
Я вижу, что единственная причина, по которой вы используете "родительский" класс, - это подключение к вашей базе данных и выполнение некоторых начальных запросов.Если вы не планируете реализовать некоторые расширенные шаблоны проектирования позже, нет абсолютно никакой причины, почему вы не могли бы сделать это внутри конструктора DatabaseQ.
class DatabaseQ {
public $dbhost;
public $dbname;
public $dbuser;
public $dbpass;
function __construct(){
include('config.php');
$this->dbhost = $dbhost;
$this->dbname = $dbname;
$this->dbuser = $dbuser;
$this->dbpass = $dbpass;
$this->connectdb(); // This is a good place to initiate your DB connection
$this->doOtherInitStuff(); // Calling the rest of the init stuff.
}
/**
* This is the place where you do all of your init stuff.
* Note the private status! The environment doesn't need to have access to your DB initialization stuff
*/
private function doOtherInitStuff() {
// Do init stuff
}
#connect to database
private function connectdb(){ // Note the private scope too! Only the object itself needs to know how to connect to the db!
$link = mysql_connect($this->dbhost,$this->dbuser,$this->dbpass);
if (!$link) {
die('Could not connect: ' . mysql_error());
}else {
//echo 'Connected Successfully to Database<br>';
}
@mysql_select_db($this->dbname) or die( "Unable to select database!");
}
#read database
function readdb(){
}
#update database
private function updatedb(){
}
#close database connection
function closedb(){
mysql_close();
}
}
С другой стороны, если вы намереваетесь создать базовый класс, который будетпозже, скажем, для использования различных «драйверов» БД (расширенные классы с перегруженными методами), вы можете создать абстрактный класс, который будет содержать чертеж только для всех методов, которые должны быть реализованы вашими расширенными (драйверными) классами.
Но это немного сложная история:)
РЕДАКТИРОВАТЬ: Если вам нужен класс, который будет специально использоваться для вывода материала, который DatabaseQ извлекает, то создайте расширенный класс DatabaseQ и поместите внутриэто все, что будет выплевывать данные.
class DatabaseQOutput extends DatabaseQ {
public function __construct(){
parent::__construct(); // You make sure here that the parents constructor is executed and a DB connection and initialization stuff is taken care off
}
public function output() {
}
}
$db = new DatabaseQOutput();
$db->output();
Но, честно говоря, вы не хотите, чтобы какой-либо из ваших классов баз данных отвечал за вывод данных, потому что, как правило, это не их работа.Классы базы данных должны рассматриваться как модели, хотя вы не используете MVC, а это означает, что их роль в первую очередь заключается в том, чтобы служить уровнем абстракции для баз данных и всех операций выборки / отправки данных.
На вашем месте я бы создал класскоторая специально предназначена для вывода данных, которые извлекаются из ваших классов базы данных.Таким образом, вы создадите класс, который будет действовать как представление и будет нести всю ответственность за вывод данных.