Request je u toj rečenici HTTP request (implicitno se podrazumeva da se radi o veb aplikaciji u PHP-u), a ne poziv klase/metode.
Da, PHP ne čuva stanje između dva HTTP poziva jer HTTP je stateless protokol, ne verujem ni da je sa ASP.Net-om nešto drugačije. Skripta se pri svakom pozivu od strane veb servera iznova izvršava u novom memorijskom prostoru, kao dva odvojena "programa". Unutar jednog izvršavanja možeš imati objekte, statičke i globalne promenljive (pa i potpuno regularne singletone) i to sve radi kako se očekuje.
Code (php):class Example
{
private static
$instance;
private function __construct
() {}
public static
function singleton
() {
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
private $foo;
public function setFoo
($foo) { $this->foo = $foo; }
public function getFoo
() { return $this->foo; }
}
$a = Example
::singleton();
$b = Example
::singleton();
$a->setFoo("bar");
echo $b->getFoo();
Promenljive
$a i
$b ukazuju na istu insancu klase Example, i poslednji red će ispisati
"bar".
Međutim ako pri ponovnom pokretanju ove skripte kroz novi HTTP zahtev ponovo pozovem
Example::singleton() ovo će biti izvršeno u novom memorijskom prostoru tu nema one instance "od malopre" sa parametrom foo="bar". Ako to želim (a ima razloga i za i protiv zašto to /ne/ treba raditi), moram ručno da sačuvam objekat u nekoj deljenoj memoriji između dva HTTP zahteva.
Ako koristiš PHP za pisanje standalone aplikacija (konzola, gui) onda je tvoja skripta jedan proces tokom celog izvršavanja sa svojim memorijskim prostorom.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja