
W celu lepszego zrozumiania OOP w php, a mianowicie dziedzieczenia i interfejsów postanowiłem stworzyć mechanizm do wyciągania i dodawania rekordów do bazy danych. Oczywiście obecnie klasa nie wykonuje żadnych działań na bazie danych ,ale chodziło mi sam fakt zrozumiania wyżej wymienionych mechanizmów w OOP.
Moje pytanie do Was brzmi tak, czy konstrukcja tej klasy idzie w dobrym kierunku jeśli chodzi o OOP. Czy jednak moje rozumienie tej dziedziny nie jest zbyt dobre jeśli tak to jakie rozwiązania proponujecie aby lepiej zrozumieć tą kwestię.
Przeczytałem temat OOP. Interfejsy oraz klasy abstrakcyjne ale tutaj jest ogólnie poruszany temat OOP który trochę mi pomogł ale jednak nie do końca.
W tym temacie chce poruszyć tylko i wyłacznie obecną klasę którą za chwilę zaprezentuję a nie ogólne zagadnienia związane o OOP. Ewentualne propozycję mają dotyczyć tylko i wyłącznie tego kodu:
Klasa SQL:
<?php interface DataBaseSelect { public function getAll(); public function getRow(); public function getValue($name); } interface DataBaseInsert { public function insertRow(); } //############################################################################# abstract class SQL { private $table = NULL; private $fields = NULL; private $where = NULL; public function setTable($table) { $this->table = ' FROM '.$table; } public function setFields($fields) { $this->fields = $fields; } public function setWhere($where) { $this->where = ' WHERE '.$where; } public function getTable() { return $this->table; } public function getFields() { return $this->fields; } public function getWhere() { return $this->where; } } //############################################################################# class SelectData extends SQL implements DataBaseSelect { private $sql_type = 'SELECT '; private $sql = NULL; public function __construct() { // Utworzenie pełnego zapytania sql $this->sql = $sql_type.parent::getFields().parent::getTable().$this->where; } public function getAll() { // Pobranie z bazy wszystkich rekordów $rows = 'wiele wyników'; return $rows; } public function getRow() { // Pobranie z bazy jednego rekordu $row = 'jeden wynik'; return $row; } public function getValue($name) { // Pobranie z bazy jednej wartośći $value = 'value'; return $value; } } //############################################################################# class InsertData extends SQL implements DataBaseInsert { public function insertRow() { // Dodanie nowego rekordu do bazy $last_id = 1; return $last_id; } } //############################################################################# class CompileSQL implements DataBaseSelect, DataBaseInsert { public function __call($method, $args) { if ($method == 'setTable') SQL::setTable($args[0]); elseif ($method == 'setFields') SQL::setFields($args[0]); elseif ($method == 'setWhere') SQL::setWhere($args[0]); else } public function getAll() { return SelectData::getAll(); } public function getRow() { return SelectData::getRow(); } public function getValue($name) { return SelectData::getValue($name); } public function insertRow(){ return SelectInsert::insertRow(); } } // przyklad wywolania $db = new CompileSQL(); $db->setTable('products'); $db->setFields('id, name, price'); $db->setWhere('id = 1'); $db->setOrderBy('name'); ?>