Witam, od dłuższego czasu próbuje zrozumieć istotę pisania obiektowo i idzie to dosyć topornie.
Prosiłbym o wypowiedź (ocenę) doświadczonych programistów z tego zakresu.
Zamieszczam przykładową klasę, którą napisałem (przechowuje tymczasowe dane w bazie np. dla operacji z potwierdzeniem...połączenie idei plików tymczasowych, rejestru windows i śmietnika..)
<?php
/**
* TMP CLASS
* @package Ecrosio
* @author Dominik Zawadzki
*/
/**
* Klasa TMP
*
* do przechowywania tymczasowych danych w bazie
* @package Ecrosio
* @author Dominik Zawadzki
* @copyright 2013 GNU GENERAL PUBLIC LICENSE
*/
class tmp {
/**
* Uchwyt do bazy ecrosio
* @access private
* @var db
*/
private $db;
/**
* nazwa modulu
* @access private
* @var string
*/
private $module;
public function __construct($db,$name) {
$this->db = $db;
$this->module = $name;
}
/**
* Funkcja dodajaca wartosc do bazy
*
* Jesli parametr name wystepuje juz w bazie funkcja doda wartosc ponownie ale ze zmieniona nazwa. Funkcja maksymalnie 50 razy moze zmieniac nazwe.
*
* @access public
* @param string name Nazwa klucza
* @param string value Wartosc klucza
* @param date termin Data po ktorej zostanie klucz usuniety (jesli nie podano system skasuje wg. wlasnego uznania) format rrrr-mm-dd
* @return bool|string true w przypadku powodzenia, false w przybadku bledu zapisu lub nazwy lub String z nazwa zmieniona klucza, gdy funkcja bedzie musiala zmienic nazwe klucza
*/
public function add($name,$value,$termin='',$alt=false) {
$alternatywa = '';
if($this->select($name) == TRUE) { //istnieje juz klucz o podanej nazwie
static $counter = 0;
$counter++;
if($counter > 50) { //ochrona stosu
return false;
}
$alternatywa = $name.$counter;
$odp = $this->add($alternatywa,$value,$termin,true);
if($odp !== FALSE)
return $odp;
}else{
$add = $this->db->prepare("INSERT INTO tmp VALUES ('',:file,:name,:value,now(),:termin)");
$add->bindValue(':file',$this->module);
$add->bindValue(':name',$name);
$add->bindValue(':value',$value);
$add->bindValue(':termin',$termin);
$response = $add->execute();
if($alt) return $name;
if($response == 1) return true; else return false;
}
}
/**
* Funkcja zwracajaca wartosc klucza lub zwracajaca tablice ze wszystkimi kluczami danego modulu
*
* W przypadku braku podania nazwy klucza, funkcja zwroci wszystkie klucze danego modulu
*
* @access public
* @param string $name Nazwa klucza (nieobowiazkowy)
* @return Bool|String|Array Zwroci false w przypadu bledu, string gdy podano nazwe klucza i znaleziono wartosc, Array w przypadku gdy nie podano nazwy klucza a funkcja znalazla wszystkie rekordy kluczy danego modulu
*/
public function select($name='') {
if($name != '') {
$select = $this->db->prepare("SELECT value FROM tmp WHERE ( file=:file AND name=:name)");
$select->bindValue(':name',$name);
$select->bindValue(':file',$this->module);
$response = $select->execute();
$r = $select->fetchAll();
if(count($r) == 0) return false;
return $r[0]['value'];
}else{
$select = $this->db->prepare("SELECT name, value FROM tmp WHERE file=:file");
$select->bindValue(':file',$this->module);
$response = $select->execute();
$r = $select->fetchAll();
if(count($r) == 0) return false;
return $r;
}
}
/**
* Funkcja zmieniajaca wartosc klucza w bazie
*
* Zmienia wartosc na nowa ($value) dla klucza $name
*
* @access public
* @param string name Nazwa klucza
* @param string value Wartosc klucza
* @return bool True w przypadku sukcesu, False w przypadku bledu
*/
public function update($name,$value) {
$update = $this->db->prepare("UPDATE tmp SET value=:value WHERE ( file=:file AND name=:name)");
$update->bindValue(':name',$name);
$update->bindValue(':file',$this->module);
$update->bindValue(':value',$value);
$response = $update->execute();
if($response == 0) return false; else return true;
}
/**
* Funkcja usuwajaca klucz
*
* Usuwa klucz wskazany w parametrze
*
* @access public
* @param string name Nazwa klucza
* @return bool True w przypadku sukcesu, False w przypadku bledu
*/
public function delete($name) {
$delete = $this->db->prepare("DELETE FROM tmp WHERE ( file=:file AND name=:name)");
$delete->bindValue(':name',$name);
$delete->bindValue(':file',$this->module);
$response = $delete->execute();
if($response == 0) return false; else return true;
}
/**
* Funkcja usuwajaca wszystkie klucze danego modulu
*
* @access public
* @return bool True w przypadku sukcesu, False w przypadku bledu
*/
public function clear() {
$clear = $this->db->prepare("DELETE FROM tmp WHERE file=:file");
$clear->bindValue(':file',$this->module);
$response = $clear->execute();
if($response == 0) return false; else return true;
}
}
?>