Cześć Wszystkim!
Otóż - mam do napisania bardzo prostą klasę cache, z zapisywaniem danych do pliku, i mam ją napisać odnosząc się do wywołania:
require "cache.php";
$cache = new Cache('news');
if($cache->has() == true)
{
$data = $cache->get();
}
else
{
$data = md5(rand(0, 9999));
$cache->set($data);
}
echo $data.'<br/>';
$cache2 = new Cache('clients');
if($cache2->has() == true)
{
$data = $cache2->get();
}
else
{
$data = md5(rand(0, 9999));
$cache2->set($data);
}
echo $data."<br/>";
Konstruktor ma przyjmować jako argument nazwę klucza tablicy asocjacyjnej do której zostanie zapisany cach, funkcja has() sprawdza dla danego klucza czy istnieją już jakieś dane w tablicy, jeżeli istnieją to je wyciągnąć funkcją get(), a jeżeli nie istnieją to je wygenerować funkcją set() i zapisać do tablicy pod danym kluczem. I tutaj leży problem a mianowicie - przy tworzeniu drugiego obiektu klasy cache do tablicy nie zostaje dodany nowy index, tylko tak jakby nadpisuję się index pierwszego obiektu indexem drugiego i tak za każdym odświeżeniem strony. Moje pytanie - jak zmodyfikować kod żeby dodawać do tablicy nowy index dla każdego nowo utworzonego obiektu. A oto ciało klasy:
class Cache
{
private $name = '';
private $path = 'cache.txt';
private $data = [];
public function __construct($name)
{
$this->name = $name;
}
public function has()
{
if((filesize($this->path))!=0)
{
$out = file_get_contents($this->path);
$outun = unserialize($out);
if(!array_key_exists($this->name,$outun))
{
return false;
}else return true;
}else return false;
}
public function get()
{
if(!array_key_exists($this->name, $this->data))
{
return false;
}
else
{
$out = file_get_contents($this->path);
$outun = unserialize($out);
$this->data[$this->name] = $outun[$this->name];
return $this->data[$this->name];
}
}
public function set($data)
{
$this->data[$this->name] = $data;
file_put_contents($this->path, serialize($this->data));
}
public function clear()
{
if(file_exists($this->path))
{
unlink($this->path);
}
else
{
echo 'Plik nie istnieje';
}
}
}