Troszeczkę przerobniłem moją klasę, według porad oraz własnych pomysłow. Teraz wyszło mi coś takiego.
class Artykul {
//zawiera unikalny numer identyfikujący artykuł w bazie danych
protected $id;
//zawiera nazwę autora tworzacego artykuł
protected $autor;
//zawiera nazwę kategorii do której przyporządkowany jest artykuł
protected $kategoria;
//zaiwera tytuł artykułu
protected $tytul;
//zawiera wstępny tekst artykułu
protected $naglowek;
//zawiera główną treść artykułu
protected $tekst_artykulu;
//zawiera datę utworzenia artykułu !!Unixowy znacznik czasu
protected $utworzony;
//zawiera datę ostatniej modyfikacji artykułu !!Unixowy znacznik czasu
protected $zmodyfikowany;
//zawiera datę ostatniej publikacji artykułu !!Unixowy znacznik czasu
protected $opublikowany;
protected
$fieldsRequired = array('autor', 'kategoria', 'tytul', 'naglowek', 'utworzony' );
protected $dbhandle;
public function __construct($id=NULL)
{
$this->dbhandle = Database::GetInstance();
if($id)
{
$this->id_art = $id;
$sql = "SELECT *
FROM j_artykuly
WHERE id = $id";
$art = $this->dbhandle->select($sql);
if(!$art)
throw new Exception('Wybrany artykuł nie istnieje');
$this->id = $id;
$this->setAll($art[0]);
}
}
/**
* Metoda zwraca wartość jednego wybranego pola klasy
*
* @param name - nazwa pola w klasie, której wartość chcemy uzyskać
**/
public function get($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;
}
public function set($key, $value)
{
if($key == 'id')
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 służy do ustawienia wartości pól w klasie
*
*@Param arData- tablica przechowująca nazwy pól i odpowiadające im wartości
*
**/
public function setAll
(array $arData) {
foreach($arData as $key => $value)
{
if($key == 'id')
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 zapisująca lub tworząca artykuł w bazie danych
*
**/
public function saveArt()
{
{
$this->validateFields();
if($this->dbhandle->insert('j_artykuly', $this->getAll()) > 0);
return true;
}
else
{
$this->validateFields();
$arConditions['id']=$this->id;
if($this->dbhandle->update('j_artykuly', $this->getAll(), $arConditions) > 0);
return true;
}
}
/**
*
* Metoda usuwająca artykuł z bazy danych
*
**/
public function delArt()
{
{
$this->validateFields();
$arWhere = array("id = ".$this->id); if($this->dbhandle->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
*
**/
public function ValidateFields()
{
foreach ($this->fieldsRequired as $field)
{
$value = $this->get($field);
$arEmpty[] = $field;
}
{
throw new Exception('Wymagane pola '.$empty.' są puste.');
}
return true;
}
?>
Dodałem pole dbhandle w którym przechowywany będzie obiekt bazy danych. Kolejne dodane pole to $fieldsRequired w którym przechowywana jest tablica z polami wymaganymi do uzupełnienia. Zmodyfikowałem tez funkcję, która ma sprawdzać czy pola te są wypełnione. Na koniec połączyłem metody createArt i UpdateArt w jedną metodę SaveArt i usunełem pole new, a zamiast niego dałem sprawdzanie po id, według wczęsniejszej porady. Jak teraz według was wyglada moja klasa?