Witam
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ę (IMG:
style_emoticons/default/smile.gif)
<?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
*
**/
public function set
(array $arData) {
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();
$arWhere = array("id = ".$this->id); 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;
}
}
?>
Ten post edytował erix 25.08.2009, 11:26:21
Powód edycji: [erix] przeniosłem