Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP4]&[OOP] Jak przeciazac metody ?
Yacho
post 7.03.2006, 10:36:50
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 !
Go to the top of the page
+Quote Post
Pigula
post 7.03.2006, 16:08:27
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:
  1. <?php
  2. function jakas_funkcja($arg)
  3. {
  4. if (is_int($arg))
  5. {
  6. //cos sie wykonuje
  7. }
  8. elseif (is_array($arg))
  9. {
  10. //cos innego sei wykonuje
  11. }
  12. //itd
  13. }
  14. ?>

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
Go to the top of the page
+Quote Post
Yacho
post 7.03.2006, 16:11:56
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 !
Go to the top of the page
+Quote Post
Sh4dow
post 7.03.2006, 16:45:47
Post #4





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


jasne światło mnie otoczyło i głos manuala rzekł overload

guitar.gif Rkingsmiley.png


--------------------
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
Go to the top of the page
+Quote Post
Yacho
post 7.03.2006, 18:49:40
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)
jasne światło mnie otoczyło i głos manuala rzekł overload

guitar.gif  Rkingsmiley.png

nietety ktoś przeslonił poł reflektora łapą tongue.gif

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
  1. <?php 
  2. function mojafunkcja($arg1,$arg2)
  3. {
  4. // tu cos robimy
  5. }
  6. function mojafunkcja($arg1,$arg2, $arg3)
  7. {
  8. // tu cos robimy cos innego poniewaz podano $arg3
  9. }
  10.  
  11. ?>


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 !
Go to the top of the page
+Quote Post
NetJaro
post 7.03.2006, 18:57:10
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?
Go to the top of the page
+Quote Post
Yacho
post 7.03.2006, 19:52:23
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) :
  1. <?php
  2.  
  3. function Mnozenie($maciezA, $macierzB) // tu argumenty sa typu Macierz (!)
  4. {
  5. // tu algorytm mnozenia macierzy
  6.  
  7. }
  8. function Mnozenie($calkowiteA, $calkowiteB)
  9. {
  10. // tu algorytm mnozenia calkowitych
  11. }
  12.  
  13. ?>


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():
  1. <?php
  2. function Miniatura($sciezka _do_zdjecia,$szerokosc)
  3. {
  4. // tu nie podano docelowego pliku dla miniatury - znaczy mamy ja wywalic na ekran
  5. }
  6. function Miniatura($sciezka _do_zdjecia,$szerokosc,$sciezka_docelowa)
  7. {
  8. // mamy inny zestaw parametrow wiec wykonujemy inna akcje - tu generowanie miniatury + zapis jej do pliku
  9. }
  10.  
  11. ?>


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 !
Go to the top of the page
+Quote Post
dr_bonzo
post 7.03.2006, 20:53:16
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:
  1. <?php
  2. function Mnozenie($maciezA, $macierzB) // tu argumenty sa typu Macierz (!)
  3. {
  4. // tu algorytm mnozenia macierzy
  5.  
  6. }
  7. function Mnozenie($calkowiteA, $calkowiteB)
  8. {
  9. // tu algorytm mnozenia calkowitych
  10. }
  11. ?>


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.
Go to the top of the page
+Quote Post
Vengeance
post 7.03.2006, 21:17:37
Post #9





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. function Miniatura($sciezka _do_zdjecia,$szerokosc,$sciezka_docelowa=null)
  4. {
  5.    //...
  6.    if(!is_null($sciezka_docelowa))
  7.       // zapisz
  8.    else
  9.       echo obrazek;
  10. }
  11.  
  12. ?>


----------
Oj, nieladnie -- musialem poprawic bbcode smile.gif
-- dr_bonzo


--------------------
Go to the top of the page
+Quote Post
Yacho
post 8.03.2006, 01:08:59
Post #10





Grupa: Zarejestrowani
Postów: 148
Pomógł: 0
Dołączył: 16.06.2003

Ostrzeżenie: (0%)
-----


przeciez napisalem ze to kod przykladowy tongue.gif czytaj cale posty tongue.gif akurat ten przyklad overloadingu jest zywcem z Javy wyciagniety jak juz zdażylem wyszperac i jak powedziales - w php sie nie da. NetJaro chcial zebym zilustrował mechanizm - mysle ze udalo sie zaprezentowac o co chodzi.....

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 !
Go to the top of the page
+Quote Post
tes
post 8.03.2006, 03:05:32
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ć smile.gif

Ten post edytował tes 8.03.2006, 03:07:08


--------------------
czemuja?
Go to the top of the page
+Quote Post
hwao
post 8.03.2006, 07:44:35
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
Go to the top of the page
+Quote Post
athabus
post 8.03.2006, 09:55:53
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...
Go to the top of the page
+Quote Post
tes
post 8.03.2006, 10:13:11
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 ? sad.gif
Szkoda... a do pewnego momentu tak się przyjemnie pisało...


--------------------
czemuja?
Go to the top of the page
+Quote Post
sobstel
post 8.03.2006, 10:30:20
Post #15





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


mogą się także przydać funkcję func_get_arg, func_get_args i func_num_args


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Yacho
post 8.03.2006, 12:21:35
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... smile.gif ) jeszcze raz dzieki wszystkim za pomoc smile.gif


--------------------
-=Yacho=-

nospor -> trzymaj sie i nie dajcie sie !
Go to the top of the page
+Quote Post
hwao
post 8.03.2006, 15:00:50
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.
Go to the top of the page
+Quote Post
Arrow
post 8.03.2006, 15:24:57
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:

  1. <?php
  2.  
  3. function zrob_miniaturke($wyjscie='header')
  4. {
  5.  
  6. }
  7.  
  8. //wywolanie
  9.  
  10. zrob_miniaturke(); //standard
  11. zrob_miniaturke('./galeria/0306/miniaturka_1.jpg'); //ze sciezka
  12.  
  13. ?>



najprosciej chyba ... :]


--------------------
Pozdrawiam Bartosz
Go to the top of the page
+Quote Post
Yacho
post 8.03.2006, 19:37:00
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 smile.gif

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 smile.gif

Ten post edytował Yacho 8.03.2006, 19:41:47


--------------------
-=Yacho=-

nospor -> trzymaj sie i nie dajcie sie !
Go to the top of the page
+Quote Post
tes
post 8.03.2006, 20:35:04
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?
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.07.2025 - 15:13