![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 1 Dołączył: 5.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam sobie dwie klasy (to tylko przykład):
I teraz jeśli zrobię tak:
To wyświetla mi obiekt $controller. Czyli zmienna $this jest dostępna w metodzie metoda. Więc co jest grane? Gdzie ta cała teoria o zasięgu zmiennych? Jak zrobić żeby zmienna $this była dostępna tylko i wyłącznie w obrębie obiektu/klasy i nie wędrowała po metodach innych klas. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
masz błąd, daj error_reporting(E_ALL|E_STRICT); a dowiesz się gdzie co i jak.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 1 Dołączył: 5.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam tylko coś takiego:
Cytat Strict Standards: Non-static method Klasa::metoda() should not be called statically, assuming $this from incompatible context in Z tym że nie chcę deklarować metody jako statyczną bo ta metoda jest wywoływana jako statyczna i jako niestatyczna. Wewnątrz niej sprawdzane jest czy istnieje $this i jeżeli nie istnieje to jest tworzony obiekt klasy. Ten post edytował tomahawk 4.08.2010, 11:15:20 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 229 Pomógł: 34 Dołączył: 7.12.2008 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Wywołujesz statyczną metodę, a nie zadeklarowałeś jej jako statyczna w klasie Klasa
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 1 Dołączył: 5.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
No tak. Ale jak zadeklaruję jako statyczną to będzie znowu problem przy wywoływaniu jej jako niestatyczną. :/
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
Metodę statyczną możesz wywołać jak nie statyczną.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Nic nie może iść jednocześnie w prawo i w lewo. W php i tak masz o wiele łatwiej. W takim C++ na zmienne/pole klasy statyczne mogły wpływać tylko metody statyczne, konstruktor i destruktor (z tego co kojarzę). Poza tym zastanawiam się czy wiesz czy rozumiesz co oznacza static przy metodzie, czy po prostu ten specyfikator Ci się podoba z nazwy
![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 1 Dołączył: 5.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
To jak w końcu? Jak będę wywoływał metodę statyczna jako niestatyczną to będzie poprawnie czy nie?
Tak rozumiem co to znaczy static:) i nie wiem skąd wywnioskowałeś że nadużywam jak nawet w moim przykładzie nie było static ani o tym nie wspomniałem. Chyba odwrotnie chciałeś zasugerować. A w cpp moim zdanie jest łatwiej ;] Jest przeciążanie funkcji ![]() |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
Cytat To jak w końcu? Jak będę wywoływał metodę statyczna jako niestatyczną to będzie poprawnie czy nie? Na prawdę masz tak duży problem aby dodać 3-4 linijki i to sprawdzić ? |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 229 Pomógł: 34 Dołączył: 7.12.2008 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat w moim przykładzie nie było static Ale było wywołanie statycznej metody ![]() Na prawdę masz tak duży problem aby dodać 3-4 linijki i to sprawdzić ? Pewnie chodziło koledze o to czy tak można robić w sensie czy nie jest to jakieś sprzeciwianie się idei OOP. Przynajmniej ja to tak odebrałem ![]() |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 1 Dołączył: 5.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Na prawdę masz tak duży problem aby dodać 3-4 linijki i to sprawdzić ? Sprawdziłem i działa. Ale skąd mam wiedzieć czy jest poprawnie? Może w nowej wersji php już nie będzie działać? Może to tylko błąd. Chyba nie do końca, bo chcesz wywołać metodę w sposób statyczny, a wewnątrz niej chcesz dobrać się do $this. Metody statyczne nie powodują tworzenia obiektu, więc nie ma wewnątrz nich czegoś takiego jak $this. Niema $this jeżeli wywołuję w sposób statyczny. A jeżeli wywołuję w sposób niestatyczny to jest. A skąd do licha ja mam wiedzieć kiedy jest wywoływana statycznie a kiedy niestatycznie? Nie wiem więc aby to sprawdzić sprawdzam czy jest $this. Ale było wywołanie statycznej metody ![]() Kiedy to nie jest metoda statyczna: Cytat Non-static method Klasa::metoda()
Ten post edytował tomahawk 4.08.2010, 12:01:50 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 229 Pomógł: 34 Dołączył: 7.12.2008 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 1 Dołączył: 5.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie widzę sprzeczności.
Chodzi o informację w metodzie. Jak została ona wywołana. Napisałem wyraźnie że w tym celu sprawdzam czy jest $this. Pewnie Tobie chodzi o to że jakbym wiedział że przed wywołaniem jest :: lub -> to bym sobie odczytał wykonywany plik, przeparsował i sprawdził czy jest tam :: czy -> ![]() Ten post edytował tomahawk 4.08.2010, 12:25:50 |
|
|
![]()
Post
#15
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
To popatrz na kod i sam oceń... Masz zwykła metodę w klasie Klasa, czyli powinieneś do niej się odnosić Klasa->metoda() a co zrobiłeś? Klasa::metoda() :0 Czyli wywołałeś niestatyczną metodę w sposób statyczny i na to się zbulwersował interpreter pisząc, że nie ma takiej metody statycznej i użycie Klasa::metoda() jest niepoprawne. Zmień w klasie Controller to tak, by najpierw utworzyć normalny obiekt Klasa i dopiero potem się pchać z Klasa->metoda(), albo zmień w Klasa metodę na statyczną i zamiast this użyj self. Jak widzisz są różne drogi na osiągnięcie tego samego celu.
Innymi słowy: "Choć myślisz, że rozumiesz, to jednak nie rozumiesz co robisz." ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 1 Dołączył: 5.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ech... rozumiem. Po prostu wygodnie mi było wywoływać metodę raz statycznie a raz niestatycznie.
Ten post edytował tomahawk 4.08.2010, 12:28:36 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 15:21 |