Od jakiegoś czasu interesuje się programowaniem obiektowym, ale od niedawna zdecydowałem się stworzyć coś własnego. Będzie to mój pierwszy obiektowy (przynajmniej w części) CMS. chciałbym przedstawić wam klasę artykułu do oceny. Prosze o konstruktywną krytykę

<?php class Artykul { //zawiera unikalny numer identyfikujący artykuł w bazie danych private $id; //zawiera nazwę autora tworzacego artykuł private $autor; //zawiera nazwę kategorii do której przyporządkowany jest artykuł private $kategoria; //zaiwera tytuł artykułu private $tytul; //zawiera wstępny tekst artykułu private $naglowek; //zawiera główną treść artykułu private $tekst_artykulu; //zawiera datę utworzenia artykułu !!Unixowy znacznik czasu private $utworzony; //zawiera datę ostatniej modyfikacji artykułu !!Unixowy znacznik czasu private $zmodyfikowany; //zawiera datę ostatniej publikacji artykułu !!Unixowy znacznik czasu private $opublikowany; //określa czy artykuł jest nowo utworzony, czy został wczytany z bazy danych private $new; public function __construct($id=NULL) { if($id) { $this->id_art = $id; $db = Database::GetInstance(); $sql = "SELECT * FROM j_artykuly WHERE id = $id"; $art = $db->select($sql); if(!$art) throw new Exception('Wybrany artykuł nie istnieje'); $this->new = false; $this->set($art[0]); } else $this->new = true; } /** * Metoda zwraca wartość jednego wybranego pola klasy * * @param name - nazwa pola w klasie, której wartość chcemy uzyskać **/ public function getOne($name) { if(property_exists(get_Class($this), $name)) return $this->$name; else throw new Exception('Klasa '.get_class($this).' nie posiada pola '.$name); } /** * * Metoda zwraca wartości wszystkich pól klasy * * @return tablica z danymi wszystkich pól; * **/ public function getAll() { 'id' => $this->id, 'autor' => $this->autor, 'kategoria' => $this->kategoria, 'tytul' => $this->tytul, 'naglowek' => $this->naglowek, 'tekst_artykulu' => $this->tekst_artykulu, 'utworzony' => $this->utworzony, 'zmodyfikowany' => $this->zmodyfikowany, 'opublikowany' => $this->opublikowany, ); return $arData; } /** * * Metoda służy do ustawienia wartości pól w klasie * [email="*@Param"]*@Param[/email] arData- tablica przechowująca nazwy pól i odpowiadające im wartości * **/ { foreach($arData as $key => $value) { if($key == 'id' && $this->new) throw new Exception("Wartość pola 'id' może być nadana tylko automatycznie"); if(property_exists(get_Class($this), $key)) { $this->$key = $value; } else throw new Exception('Klasa '.get_class($this).' nie posiada pola '.$key); } } /** * * Metoda Tworząca artykuł w bazie danych * **/ public function createArt() { if($this->new) { $this->checkRequiredData(); $db = Database::getInstance(); if($db->Insert('j_artykuly', $this->getAll()) > 0); return true; } throw new Exception('Bierzący artykuł już istnieje w bazie danych. Można go tylko zaktualizować'); } /** * * Metoda aktualizująca dane artykułu w bazie danych * **/ public function updateArt() { if(!$this->new) { $this->checkRequiredData(); $db = Database::getInstance(); $arConditions['id']=$this->id; if($db->Update('j_artykuly', $this->getAll(), $arConditions) > 0); return true; } throw new Exception('Musisz najpierw utworzyć artykuł w bazie danych aby móc go edytować'); } /** * * Metoda usuwająca artykuł z bazy danych * **/ public function delArt() { if(!$this->new) { $this->checkRequiredData(); $db = Database::getInstance(); if($db->delete('j_artykuly', $arWhere) > 0) return true; } throw new Exception('Nie można usunąć bierzącego artykułu, ponieważ nie został jeszcze zapisany w bazie danych.'); } /** * * Metoda sprawdzająca czy pola, które nie mogą być puste w bazie danych, są wypełnione danymi * **/ private function checkRequiredData() { $arData = $this->getAll(); foreach($arData as $key => $value) { if($key=='autor' || $key=='kategoria' || $key=='tytul' || $key=='naglowek' || $key=='utworzony') { if(!$value) $arEmpty[]=$key; } } { throw new Exception('Wymagane pola '.$empty.' są puste.'); } return true; } } ?>