![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
Czy w PHP4 mozna przeciazac metody ? (chodzi o rozne warianty funkcji w zaleznosci od podanych parametrów...) jesli tak to jak to jest realizowane ?
-------------------- -=Yacho=-
nospor -> trzymaj sie i nie dajcie sie ! |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 446 Pomógł: 0 Dołączył: 5.03.2005 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
przeciazenie funkcji chyba nie jest mozliwe tak jak ma to miejsce w np. c++ mozesz zrobic cos takiego:
tylko to mi przyszlo na mysl. mozesz oczywiscie kilka miec argumentow co zwiekszy ilosc kombinacji. ------------- Edit: jest to troche sztuczne ale pomaga przy konstruktorze jak musisz go przeciazyc. Ten post edytował Pigula 7.03.2006, 16:09:57 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
no wlasnie... problem tylko w tym ze to srednio czytelne rozwiazanie jest
chodzi o to ze chce miec funkcje do robienia miniatur.... jesli user poda sciezke pliku wyjsciowego to idzie na plik wyjsciowy - jesli nie to zwraca na domyslne wyjscie (wysyla header i stream) w sumie przeciazanie by sie tu najbardziej przydalo :/ Ten post edytował Yacho 7.03.2006, 16:14:05 -------------------- -=Yacho=-
nospor -> trzymaj sie i nie dajcie sie ! |
|
|
![]() ![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 569 Pomógł: 0 Dołączył: 17.08.2003 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
-------------------- Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota Zarządzaj swoim budżetem domowym |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Sh4dow @ 2006-03-07 17:45:47) nietety ktoś przeslonił poł reflektora łapą ![]() Cytat Ponieważ jest to rozszerzenie eksperymentalne, nie wszystko działa. Brakuje aktualnie wsparcia dla __call(), można przeciążać tylko operacje pobierania i ustawiania właściwości obiektu. Nie można także wołać funkcji obsługi przeciążania jak normalnych metod istniejących w klasie, a __set() działa tylko do jednego poziomu dostępu do właściwości. kompletnie nie rozumiem tych przykladow.... chce miec cos w stylu
niestety - przykladu z manuala ni cholery nie moge odniesc do tego o co mi chodzi..... oooo i znalazlem dlaczego - cytat z komentarza manuala.... : Cytat While this is a nice Feature it has nothing to do with Overloading as it is known in other OO-Languages.
What this feature does is allowing the dynamic addition of instance variables as e.g in Python. Overloading means defining several methods with the same name in a single class. Which method will be called depends on the number and type of arguments specified. With dynamic and weak typed languages (like php) this can of course not work. Ten post edytował Yacho 7.03.2006, 18:56:16 -------------------- -=Yacho=-
nospor -> trzymaj sie i nie dajcie sie ! |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 475 Pomógł: 0 Dołączył: 1.04.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A ja mam pytanie - po co się przeciąża metody? Jakie jest tego zastosowanie?
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
hymm
przytocze Ci 2 przyklady : pierwszy - piszesz program do mnożenia dwóch składników przez siebie - gdzie skladnik moze byc albo liczbą albo macierzą... wiec musisz zobaczyc czy pobrane A i B as macierzami czy intami nastepnie napisac metody Mnoz_maciez() i mnoż_calkowita() w zaleznosci od tego jakiego typu sa pobrane zmienne... Natomiast jesli mozesz korzystac z przeciazania (co okazalo sie w PHP4 niemozliwe) to : piszesz metode mnoz w mniej wieej taki sposob (kod poglądowy) :
teraz starczy ze wywolasz metode mnozenie($podaneA, $podanB) kompilator sam powinien rozpoznac typy zmiennych - jesli beda to macierze to wywola algorytm dla macierzy - jesli integery - bedzie algorytm dla intów Jak wlasnie pisalem dobrym przykladem jest tworzenie miniaturek - czaem potrzebujemy zeby skrypt zapisal nam plik jpg gdzies na dysku (wtedy podajemy go w sciezce docelowej) czasem potrzebujemy by tylko "wywalil go na ekran" zeby wstawic w tag <img> moglibysmy skostruowac takie przeciazenie metody Miniatura():
Jak widac na ponizszym przykladzie jest to tworzenie jakby "alternatywnych wersji" metod o tych samych nazwach - w zaleznosci od parametrow metody (nie tylko od ich typu ale także ilosci !) wywoływana jest odpowiednia metoda.... glownym powodem dla ktorego w php nie ma przeciazania jest to ze typy zmiennych sa slabo akcentowane - jednakze myslalem ze metody mozna przeładować korzystając z ilosci podawanych do nich parametrów.... -------------------- -=Yacho=-
nospor -> trzymaj sie i nie dajcie sie ! |
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Yacho - nie da sie tak:
Mozesz uzyc func_args() czy jakos tak i wybierac metode wg. listy parametrow. Ale w twoim przypadku rozbij to min. 2 funkcje: na generowanie pliku graficznego i jego zapis do pliku lub wyswietlenie. -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
---------- Oj, nieladnie -- musialem poprawic bbcode ![]() -- dr_bonzo -------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
przeciez napisalem ze to kod przykladowy
![]() ![]() Zastosuje metode jaka Vee podał jednak nie podoba mi sie to - z przeciazeniem byloby o tyle prosciej i czytelniej (chlip) Ten post edytował Yacho 8.03.2006, 01:12:16 -------------------- -=Yacho=-
nospor -> trzymaj sie i nie dajcie sie ! |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 23.06.2004 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Czy w php da się przeładowywać konstruktor ?
Bo mi to nie wychodzi, a z ifami to biednie wygląda :/ Aha... chodzi mi o PHP5, nie chciałem nowego tematu zakładać ![]() Ten post edytował tes 8.03.2006, 03:07:08 -------------------- czemuja?
|
|
|
![]()
Post
#12
|
|
![]() Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
nie da sie, poniewaz w php nie ma typow zmiennych narzuconych
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
w php5 jest cos takiego jak __call() ale tez srednio sie spisuje. Jak ify byly tak sa niestety.
W php chyba dlugo nie bedzie mozna przeciazac metod bo a)brak scislej kontroli typow (choc w php5 juz w obiektach mozna w ograniczony sposob kontrolowac typy) b)php ma zaimplementowane argumenty opcjonalne w funkcjach/metodach (w przeciwienstwie np do c#) przez co przeciazanie realizuje sie niejako automatyczie Nie wiem jak wam, ale mi strasznie brakuje przeciazania z prawdziwego zdarzenia. Moze w php6... |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 23.06.2004 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(hwao @ 2006-03-08 07:44:35) nie da sie, poniewaz w php nie ma typow zmiennych narzuconych Czyli zostają mi warunki ? ![]() Szkoda... a do pewnego momentu tak się przyjemnie pisało... -------------------- czemuja?
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
-------------------- "If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(athabus @ 2006-03-08 10:55:53) Nie wiem jak wam, ale mi strasznie brakuje przeciazania z prawdziwego zdarzenia. Moze w php6... oby ! w php ostatnio OOP sie niby tak upowszechnia i wszyscy zachwalaja je jako jedyne wlasciwe podejscie a nie ma jeszcze kompletu narzedzi do stosowania.... btw. (zalozylem ten temat w przedszkolu bo moje pojecie o php w sumie jest jeszcze nie takie jak bym chcial - wywiazala sie z tego calkiem fajna dyskusja - az sie zdziwilem... ![]() ![]() -------------------- -=Yacho=-
nospor -> trzymaj sie i nie dajcie sie ! |
|
|
![]()
Post
#17
|
|
![]() Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
w php6 nie bedzie, prawdopodobnie.
dlamnie nie potrzebne wogole jest tego typu przeciaznie metod w php, bo poco? w innych jezykach jest to poprostu wygodniejsze w php nie zachodzi taka potrzeba. |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 43 Pomógł: 0 Dołączył: 5.05.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Yacho @ 2006-03-07 18:11:56) no wlasnie... problem tylko w tym ze to srednio czytelne rozwiazanie jest chodzi o to ze chce miec funkcje do robienia miniatur.... jesli user poda sciezke pliku wyjsciowego to idzie na plik wyjsciowy - jesli nie to zwraca na domyslne wyjscie (wysyla header i stream) w sumie przeciazanie by sie tu najbardziej przydalo :/ witam, a nie wystarczy tak:
najprosciej chyba ... :] -------------------- Pozdrawiam Bartosz
|
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
no tak oczywiscie ale po co komplikowac ? zauwaz ze masz tam jedna zmienna ktora jest w sumie potrzebna do .... niczego - kwestia taka czy jest to na tyle przejrzysta konstrukcja ze za 2 miesiace spojrzysz na ko i bedziesz wiedziec o co chodzi - bo ze to mozna zrobic to wiadomo - kwestia zeby zrobic to jak najlepiej
![]() Cytat w php6 nie bedzie, prawdopodobnie. dlamnie nie potrzebne wogole jest tego typu przeciaznie metod w php, bo poco? w innych jezykach jest to poprostu wygodniejsze w php nie zachodzi taka potrzeba. Ja obserwuje taka tendencje ze niektorzy ludzie na sile proboja udowodnic co mozna a co nie mozna w php - i stosuje sie wymyslne wzorce projektowe modele typu MVC i inne - ale nie wiem czy uciekanie sie do tych metod jest w 100% slusznym zalozeniem - php nie jest takim jezykem jak java czy dotnety - wiec pewne konstrukcje nie maja w nim zastosowania i w niektore rzeczy nie powinno sie pakowac - a jesli juz mamy sie pakowac powinnismy miec komplet narzedzi do tego... dobra sorry za OT - temat mozna uznac za zakonczony ![]() Ten post edytował Yacho 8.03.2006, 19:41:47 -------------------- -=Yacho=-
nospor -> trzymaj sie i nie dajcie sie ! |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 23.06.2004 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(hwao @ 2006-03-08 15:00:50) dlamnie nie potrzebne wogole jest tego typu przeciaznie metod w php, bo poco? w innych jezykach jest to poprostu wygodniejsze w php nie zachodzi taka potrzeba. Wygodniejsze to mało powiedziane. I robi różnicę ;] Akurat imo przeciążanie konstruktora to bardzo przydatna sprawa. Inne metody to mi tam rybka. -------------------- czemuja?
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.07.2025 - 15:13 |