Bazowa klasa sesji mojego frameworka:
<?php class BaseSession { //deny cloning of object private function __clone(){} private function __construct(){} /** * @return UserSession Session object */ public function getInstance() { return ($i = &self::$instance) ? $i : $i = new self; } } ?>
Klasa dziedzicząca, implementująca już konkretną funkcjonalność dla danej aplikacji:
<?php class DerivedSession extends BaseSession { //jakies funkcje... } ?>
Problem polega na tym, ze w entry-poincie mojej aplikacji robie tak, zeby singleton zainicjalizowal sie tym dziedziczonym obiektem:
$tmp = DerivedSession::getInstance();
Mimo tego tworzy mi sie obiekt typu BaseSession! Jeżeli w klasie DerivedSession skopiuje metodę getInstance z definicją taką jaka jest w BaseSession, wszystko działa zgodnie z oczekiwaniami, czyli powyższy kod tworzy obiekt klasy DerivedSession.
Czy w takim razie to jest normalne zachowanie dla OOP w PHP, jeżeli wywołuje funkcje statyczną w kontekscie klasy dziedziczącej (bez przeciążania tej funkcji), to "self" w dalszym ciągu odnosi się do klasy bazowej?
Pozdrawiam
Adam