![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 11.01.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witaj,
mam takie banalne pytanie, jak poprawnie wywołać metodę niestatyczną ze środka metody statycznej, która jest w innej klasie? Przy tym nie chcę w tej metodzie tworzyć egzemplarza klasy.
Powyższy kod, wypluwa mi następujący błąd: Cytat Fatal error: Call to a member function metoda_w_innej_klasie() on a non-object in I moje pomysły się skończyły. Pomożesz? :-) |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Normalne metody (tj. niestatyczne) wywołuje się na rzecz obiektów, więc oczywistym jest, że musisz mieć jakiś obiekt.
PS. Na 99,9% właściwość database nie powinna być tutaj statyczna, a sam obiekt bazy danych (czy właściwie połączenia jak się domyślam) powinien być przekazany z zewnątrz, jako argument konstruktora. Ten post edytował Crozin 2.06.2014, 14:59:33 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 11.01.2013 Ostrzeżenie: (0%) ![]() ![]() |
I ten obiekt chciałbym, żeby był dostępny dla każdej metody (bo jak utworzę egzemplarz w metodzie to działa poprawnie).
Jeżeli database będzie nie statyczną to nie dostanę się do niej przez $this. Jakiś inny pomysł? Już wiem, że to źle robię, chciałbym w tej metodzie uzyskać dostęp do metody, która łączy się z db i pobiera dane. Jeżeli dobrze zrozumiałem @Crozin, to chodziło Ci o coś takiego?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 594 Pomógł: 122 Dołączył: 17.07.2005 Skąd: P-na Ostrzeżenie: (0%) ![]() ![]() |
metoda statyczna nie ma dostępu do $this, może zastosuj singleton ?
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 11.01.2013 Ostrzeżenie: (0%) ![]() ![]() |
Udało mi się zrealizować moje zamierzenia. Tzn. mam "uchwyt" do db dostępny z każdej metody. Po prostu stworzyłem nową metodę statyczną, w której utworzyłem uchwyt do klasy z db.
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli klasa databaseManager nie będzie singletonem to za chwilę zacznie się pierdyliard połączeń z bazą co zaowocuje spadkiem wydajności.
Tak jak kolega wyżej napisał zaimplementuj DBHandlera jako singleton i będziesz miał np;
Też będziesz miał dost. z każdej metody i klasy. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 29.06.2025 - 14:18 |