Witam
Prosiłbym o sprawdzenie poprawności w napisaniu klasy do "keszowania" zapytań mysql (czy chociaż dobrze zacząłem ją pisać), gdyż nie mam wiedzy na temat zaawansowanego programowania w php (którego trochę mogłem już zapomnieć) i zawsze używałem gotowych klas mysql. Klasa nie jest jeszcze dopracowana.
//Klasa mysql cache
{
//Ustawienia
private $folder='temp/'; //Folder cache
//Pomocne w klasie
private $connect; //Do połączenia i zamykania połączenia z mysql
public $row=array(); //Do pobierania wyników z bazy private $cache_buffer=array(); //Przechowuje tutaj dane z cache public $cache_stan=0; //Pomaga w zakończeniu pętli w fetch_assoc()
public $array_num=0; //Ostatni numer tablicy
private $zapytanie_bez_cache; //Gdy cache jest nieaktywne przypisuje mu wyniki z mysql_query(), aby móc odtworzyć rekordy z użyciem w funkcji klasy: fetch_assoc
private $cache_name; //Nazwa pliku cache
public $queries=0; //Zlicza zapytania
########## Konstruktor ##########
function __construct($host,$user,$pass,$baza)
{
}
##############################
########## Destruktor
function __destruct()
{
}
##############################
########## Zapytanie ##########
public function query($zapytanie, $cache=false) //Drugi parametr określa, czy włączyć cache i jednocześnie przypisuje nazwę pliku
{
$this->cache_name=$cache; //Daje znać, czy użyć cache jednocześnie tworząc nazwę pliku
if($this->cache_name) //Z cachowaniem (czy nazwa pliku cache została podana)
{
if(file_exists(''.$this->folder.''.$this->cache_name.'.plik')) //Gdy plik cache istnieje {
$this->array_num=count($this->cache_buffer); //Liczba elementów tablicy }
else //Gdy nie ma pliku cache, to tworzymy go
{
$this->queries++; //Liczba zapytań rośnie
{
$temp[]= $r;
}
$this->cache_buffer=$temp; //Przenosi tablicę z wynikami do buffera
$this->array_num=count($this->cache_buffer); //Liczba elementów tablicy @file_put_contents
(''.$this->folder.''.$this->cache_name.'.plik',serialize($temp)); //umieszczenie pliku }
return 1;
}
else //Bez cachowania
{
die('Problem z zapytaniem<br /> Błąd: '.mysql_error()); //Zapytanie do bazy, przypisuje je zmiennej, aby móc potem pobrać rekordy $this->queries++; //Liczba zapytań rośnie
}
}
##############################
########## Pobieranie wyników ##########
public function fetch_assoc()
{
if($this->cache_name) //Z cachowaniem
{
if($this->array_num==$this->cache_stan){ //Czy ilość elementów jest równa numerowi tablicy, jeśli nie, to numer tablicy się zwiększa
return 0; //Pobrano wszystkie elementy tablicy - koniec pętli
}
else
{
$this->row = $this->cache_buffer[$this->cache_stan]; //Tworzy tablicę do wyświetlania wyników, począwszy od tablicy z numerem 0
$this->cache_stan++; return 1; //Pobiera elementy, indeks zwiększa się, pętla trwa
}
}
else //Bez cachowania
{
return $this->row;
}
}
########################################
########## Mysql_num_rows ##########
public function num_rows()
{
if($this->cache_name) //Z cachowaniem
{
return $this->array_num;
}
else //Bez cachowania
{
}
}
####################################
}
##################################################
###################### TEST ######################
##BENCHMARK
function czas()
{
$a= (double)$time[0];
$b= (double)$time[1];
return $b + $a;
}
##BENCHMARK
$poczatek = czas();
$x=0;
$sql=new mysql('localhost','root','krasnal','baza'); $sql->query('SELECT nazwa FROM rekordy ORDER BY id DESC LIMIT 100','NazwaPlikuCache'); //Drugi parametr tworzy plik cache o takiej nazwie, nie podając go cache się wyłącza
if($sql->num_rows()>0
){echo 'Są rekordy ('.$sql->num_rows().')<br />';}else{echo 'brak rekordów!<br />';} //Test mysql_num_rows while($sql->fetch_assoc())
{
$x++;
echo $x.') '.$sql->row['nazwa'].'<br />';
}
$koniec= czas();
$c = $koniec - $poczatek;
echo "<br /><br />czas generowania " . substr($c, 0, 5) . " sek.<br />Zapytań: ".$sql->queries; ##################################################
###################### TEST ######################
Powód edycji: [erix]: przeniosłem