![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 276 Pomógł: 3 Dołączył: 22.10.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
To zacznijmy od początku.
Mam sobie taką klasę bazową (zostawiam najważniejsze elementy)
i chciałem skorzystać z wzorca Singleton (osatnio czytałem i postanowiłem przerobić to tak, żeby działało) Więc zrobiłem tak: $db jest statyczne
getDB zmieniłem żeby działało jak getIsntance
a kontruktor teraz wygląda tak
Pozostałość bez zmian. Mam inne klasy, które dziedziczą po BaseClass i które wywołują w swoim kontruktorze kontruktor rodzica oraz korzystają z $this->doSQL(); Niestety wywołuje too błąd: Kod atal error: Cannot access empty property in C:\wamp\www\robotECS\core\classes\baseclass.php on line 141 (to ta linia 143 z pierwszego listingu)Dlaczego właściwość jest pusta? Pewnie coś robię źle, jeśli tak to co? Czy wywołanie $this->db->jakaśFunkcja() w funkcjach dziedziczacych po baseClass jest porpawne jeśli nie to jak to robić? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
witam ...
Zamień $this->db na self:$db - to jest static ... ale też nie wiem czy będzie działać (musisz chyba przepisać to do zmiennej bo nie pamiętam czy można napisać self: ![]() pozdrawiam -------------------- Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 276 Pomógł: 3 Dołączył: 22.10.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Zmieniłem wszędzie w klasie bazowej na self::$db i póki co wszystko działa.
Z innej beczki. Mam klasę User dziedziczącą po BaseClass i funkcję która wywołuje mi coś takiego:
konstruktor usera wywołuje kostruktor bazowy: parent::__construct() Jeśli dobrze rozumiem to: - dzięki temu co napisałem (mam nadieję, że to dobry Singleton jest ![]() - $pdo = $user->getDB(); zwróci mi do zmiennej $pdo tego static $db dzięki czemu nie postanie żadne nowe połączenie tylko będę korzystał z już istniejącego Pytanie za 100pkt. Jak sprawdzić czy działa to tak jak napisałem tzn czy mimo wszystko jakimś cudem nie jest tworzone nowe połączenie do bazy? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
witam
$user = new User($user_id); daje nowy obiekt ... musisz odwoływać się przez getDB ($user = BaseClass::getDB) by sprawdzić ile razy tworzy się pdo wewnątrz getDB w ifie daj sobie printa albo jakieś logowanie do pliku a tak wogóle to powinno być tak: konstruktor powinien być private i do obiektu powieneś się odwoływać tylko przez ::getDB z klas potomnych oraz z zewnątrz ... tworzenie pdo przenieś do konstrukra ... i w getDB tylko zwracanie zapisanej instancji ... pozdrawiam -------------------- Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 276 Pomógł: 3 Dołączył: 22.10.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Pobawiłem się trochę moim kodem i okazało się, że chyba nie jest to do końca Singleton albo ja coś spaprałem.
Oto co zrobiłem BaseClass.php
Później podczas logowania wywoływana jest klasa LoginUSer, która dziedziczy po User a ta po BaseClass, loguję się do aplikacji, czyli jest tworzona instancja obiektu user, wywołuje się kontruktor BaseClass.php, można się zatem odwołać do połączenia z bazą poprzez BaseClass:$db i tutaj się myliłem, bo taki kod nie chce mi zadziałąć.
Czy ma jakiekolwiek znaczenie to, że instancja klasy user jest wywoływana w pliku index.php a getForumList() w rbx.php? Ten post edytował Aztech 12.07.2006, 18:56:06 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 10.07.2025 - 10:05 |