Poznałem właśnie wzorzec rejestr i mam taki problem:
register.php class RegisterException extends Exception {}
class Register {
public function set($object, $name= NULL) {
$name= (!is_null($name)) ?
$name : get_class
($object);
if($this->contains($name))
return $this->store[$name];
$this->store[$name]= $object;
return true;
}
public function get($name) {
if(!$this->contains($name))
throw new RegisterException('Podany obiekt nie istnieje !');
return $this->store[$name];
}
public function remove($name) {
if(!$this->contains($name))
throw new RegisterException('Podany obiekt nie istnieje !');
unset($this->store[$name]);
return true;
}
public function contains($name) {
if(isset($this->store[$name])) return true;
return false;
}
}
class Klasa {
private $liczba1;
public function __construct($integer) {
$this->liczba1= $integer;
}
public function setLiczba($integer) {
$this->liczba1= $integer;
}
public function getLiczba() {
return $this->liczba1;
}
}
register_start.php
require 'register.php';
$klasa1= new Klasa(15);
$klasa2= clone $klasa1;
$klasa2->setLiczba(30);
$klasa3= clone $klasa1;
$klasa3->setLiczba(50);
$register= new Register();
$register->set($klasa1, 'klasa1');
$register->set($klasa2, 'klasa2');
$register->set($klasa3, 'klasa3');
$_SESSION['register']= $register;
echo '<a href="register2.php" title="przejdź do odczytu rejestru">odczyt rejestru</a>';
register2.php
require 'register.php';
$register= isset($_SESSION['register']) ?
$_SESSION['register'] : null;
try {
$klasa1= $register->get('klasa1');
$klasa2= $register->get('klasa2');
$klasa3= $register->get('klasa3');
} catch(RegisterException $e) {
}
echo $klasa1->getLiczba() . '<br/>'; echo $klasa2->getLiczba() . '<br/>'; echo $klasa3->getLiczba() . '<br/>';
Najpierw startuje od
register_start.php, potem klikam na linka i mam taki błąd:
Fatal error: main() [<a href='function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Register" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in C:\xampp\xampp\htdocs\php\register2.php on line 9