![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 25.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
W wersji PHP 5.2.5 pojawił się pewien problem, którego poprzednio nie było. Najlepiej wyjaśnię o co chodzi na przykładzie. Kod wygląda następująco, został on trochę zmodyfikowany, żeby był jak najkrótszy, ale żeby wystąpił problem. Normalnie klasy są w osobnych plikach dołączane require_once.
Widać dwie klasy CustomSession do obsługi sesji oraz ApplicationCore z całym balastem do łączenia z bazą i innymi. Oto co wyświetla przeglądarka: CODE CustomSession: object(ApplicationCore)#1 (1) { ["_appInitialized"]=> bool(true) } setSessionTable: object(ApplicationCore)#1 (1) { ["_appInitialized"]=> bool(true) } _open: object(ApplicationCore)#1 (1) { ["_appInitialized"]=> bool(true) } _read: object(ApplicationCore)#1 (1) { ["_appInitialized"]=> bool(true) } _write: NULL _close: NULL _gc: NULL Oczywiście problemem są te NULL'e, co w rezultacie skutkuje: Fatal error: Call to a member function Query() on a non-object in Siedzę już nad tym drugi dzień i zgłupiałem. Jeśli ktoś byłby w stanie pomóc to byłoby super. Pozdrawiam Ten post edytował jk1980 25.02.2010, 10:55:41 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Po co robisz obiektowo, jak kod jest naszpikowany globalami...? Bezsens. Cytat Oczywiście problemem są te NULL'e, co w rezultacie skutkuje: Fatal error: Call to a member function Query() on a non-object in Ale która metoda wywołuje w ogóle Query? Bo jakoś w tym listingu tego nie widać. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 25.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Historia była taka, że w oryginalnym projekcie wyskakiwał właśnie ten Fatal error: Call to a member function Query() on a non-object in
Po analizie doszedłem do tego, że w niektórych metodach tej klasy CustomSession appCore pomimo iż jest global to i tak wywala, że jest null. Dlatego sporządziłem przykładowy kod, żeby pokazać naturę problemu. W oryginale wszystko jest w różnych plikach Dodatkowo obłożyłem go global'ami, żeby pokazać co się dzieje. Acha, a to Query jest między innymi w metodach _write, _read, _destroy i powoduje ono wysłanie zapytania do bazy (Query jest metodą z appCore). Tylko wywaliłem je z tego przykładu, żeby nie zaciemniać. Chodzi więc o to, dlaczego w jednych metodach tej samej klasy pokazuje NULL a w innych nie... Ten post edytował jk1980 25.02.2010, 11:15:09 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Powiem to tak - przerób najpierw to na Singleton zamiast globali. Może gdzieś po prostu wykonujesz przypisanie, które to wszystko zeruje, albo wykonuje się w innej kolejności. Singletona nie wyzerujesz, więc będą dwie pieczenie na jednym ogniu.
![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 25.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Przerobienie nic nie da. Załóżmy, że to jest cały kod, nie ma żadnego Query.
Gdybym chciał w metodzie _write, wykonać jakąkolwiek metodę z klasy ApplicationCore wywali błąd, ale ta sama metoda wywołana z _read błędu nie wywali. Nic nie jest po drodze zerowane. Co ciekawe wszystko działa ok w PHP 5.1.5, natomiast w PHP 5.2.5 już nie. Wydaje mi się, że to ma coś wspólnego z tym, że to ma obsługiwać sesje, i prawdopodobnie jakimś cudem metoda _write jest wywoływana przed utworzeniem obiektu ApplicationCore. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 17:43 |