konto usunięte
konto usunięte
Temat: przeciążenie funkcji
To kwestia takiego, a nie innego wyboru, nie ma się czym chwalić i nie ma nad czym płakać. Jeśli dokumentacja jest dobra, tragedii nie będzie. Kod może tylko być trudniejszy do zrozumienia dla tych nielicznych programistów, którzy nigdy nie widzieli języka, w którym możliwe jest przeciążanie metod. Ale takich przecież i tak nie potrzebujemy :)konto usunięte
Temat: przeciążenie funkcji
"przeciążanie nie kojarzy się dobrze"Przeciążanie to normalna technika. W PHP robi się to m/w tak:
function add($a, $b)
{
if( is_string($a) && is_string($b) )
{
return addStrings($a, $b);
}
elseif( is_numeric($a) && is_numeric($b) )
{
return addNumerics($a, $b);
}
else
{
throw new Exception('Bad argument types');
}
}
...powiedzmy.
Pokaż kod, o którym mowa, to powiemy coś więcej. W JS można zrobić analogicznie jak wyżej.
Co Ci się źle kojarzy?
konto usunięte
Temat: przeciążenie funkcji
Chyba, że jemu chodzi o użycie magicznych __call() albo __callStatic()????// EDIT:
Jeśli tak, to ważna jest jedna rzecz: operacja wykonywana przez umagicznioną metodę powinna mieć odzwierciedlenie w metodzie zwyczajnej, publicznej, aby dało się wykonać ją bez uciekania się do magii.Łukasz K. edytował(a) ten post dnia 13.09.11 o godzinie 17:22
Tomasz Zadora programuję
Temat: przeciążenie funkcji
Łukaszu, coś Ci się pomyliło:http://pl.wikipedia.org/wiki/Przeci%C4%85%C5%BCanie_fu...
W PHP nie da się przeciążać funkcji - to znaczy nie możesz mieć np. klasy która ma dwie metody o tej samej nazwie ale o różnej liczbie i typie argumentów.
Jest to poniekąd logiczne, ponieważ w funkcjach PHP nie określa się typu argumentów.
End.
@Paweł - w związku z tym programista nie mógł przeciążyć funkcji (w PHP), może chodzi mu o to że rozszerzył klasę i zmienił działanie funkcji pochodzącej od rodzica ?Tomasz Zadora edytował(a) ten post dnia 13.09.11 o godzinie 18:10
konto usunięte
Temat: przeciążenie funkcji
Tomasz Zadora:
Łukaszu, coś Ci się pomyliło:
http://pl.wikipedia.org/wiki/Przeci%C4%85%C5%BCanie_fu...
W PHP nie da się przeciążać funkcji - to znaczy nie możesz mieć np. klasy która ma dwie metody o tej samej nazwie ale o różnej liczbie i typie argumentów.
Jest to poniekąd logiczne, ponieważ w funkcjach PHP nie określa się typu argumentów.
End.
Nic mi się nie pomyliło. To wszystko co piszesz to racja, ale przeciążanie to jest obsługa różnych typów za pomocą tej samej funkcji, więc tak czy owak funkcja oczekuje konkretnych typów argumentów na wejściu, więc przeciążenie możemy zrealizować tak jak napisałem. Oczywiście nie jest to mechanizm wbudowany w PHP.
(Sory, nie wysłowię się dziś, gorączka)
@Paweł - w związku z tym programista nie mógł przeciążyć funkcji (w PHP), może chodzi mu o to że rozszerzył klasę i zmienił działanie funkcji pochodzącej od rodzica ?
W manualu PHP jest mowa o przeciążaniu przy użyciu __call() - dlatego bardziej na to bym stawiał.
// EDIT: chociaż faktycznie - mylenie overload i overwrite jest nagminne.Łukasz K. edytował(a) ten post dnia 13.09.11 o godzinie 18:38
Łukasz
C.
Senior Technical
Architect
Temat: przeciążenie funkcji
Łukasz K.:
"przeciążanie nie kojarzy się dobrze"
Przeciążanie to normalna technika. W PHP robi się to m/w tak:
function add($a, $b)
{
if( is_string($a) && is_string($b) )
{
return addStrings($a, $b);
}
elseif( is_numeric($a) && is_numeric($b) )
{
return addNumerics($a, $b);
}
else
{
throw new Exception('Bad argument types');
}
}
...powiedzmy.
Pokaż kod, o którym mowa, to powiemy coś więcej. W JS można zrobić analogicznie jak wyżej.
Co Ci się źle kojarzy?
Co to k*rwa jest :D!?
1) w php NIE MA przeciazania funkcji
2) w php JEST przeciazenie METOD
3) w php sa funkcje o nieokreslonej liczbie/typach parametrow (variadic functions)
konto usunięte
Temat: przeciążenie funkcji
Łukasz C.:
Co to k*rwa jest :D!?
1) w php NIE MA przeciazania funkcji
Wbudowanego nie.
2) w php JEST przeciazenie METOD
Jakieś magiczne sratytaty... a metoda to inaczej funkcja składowa klasy ;P
3) w php sa funkcje o nieokreslonej liczbie/typach parametrow (variadic functions)
Nom i... ? ;)
Odmeldowuję się do wyzdrowienia :P
Łukasz
C.
Senior Technical
Architect
Temat: przeciążenie funkcji
Łukasz K.:zrobiles kupe na publicznym forum, wstydz sie ;p
Nom i... ? ;)
konto usunięte
Temat: przeciążenie funkcji
Wg PHP'owego manuala przeciążanie metod polega właśnie na użyciu magicznych __call()/__callStatic().Więc - przeciążanie jest złe, magia jest zła.
Kiedyś nie można było typować argumentów, teraz w pewnym zakresie można i mogli by przeciążanie zrobić w końcu.
function foo(Array $var) {
echo 'yada yada yada';
}
function bar(stdClass $var) {
echo 'yada yada yada';
}
foo( array() );
bar( new stdClass() );
Ergo - na obecną chwilę nie ma przeciążania funkcji/metod w PHP'ie.
konto usunięte
Temat: przeciążenie funkcji
Przeciążanie metod w języku dynamicznym to oxymoron.konto usunięte
Temat: przeciążenie funkcji
Łukasz K.:
"przeciążanie nie kojarzy się dobrze"
Przeciążanie to normalna technika. W PHP robi się to m/w tak:
function add($a, $b)
{
if( is_string($a) && is_string($b) )
{
return addStrings($a, $b);
}
elseif( is_numeric($a) && is_numeric($b) )
{
return addNumerics($a, $b);
}
else
{
throw new Exception('Bad argument types');
}
}
...powiedzmy.
Pokaż kod, o którym mowa, to powiemy coś więcej. W JS można zrobić analogicznie jak wyżej.
Co Ci się źle kojarzy?
AHahahahahaah, jeb*em :D
to wylonduje na funnycode.pl xDPrzemek Czekaj edytował(a) ten post dnia 13.09.11 o godzinie 21:38
konto usunięte
Temat: przeciążenie funkcji
Przemek Czekaj:
AHahahahahaah, jeb*em :D
to wylonduje na funnycode.pl xD
Cytat z wikipedii: "w programowaniu występowanie pod taką samą nazwą wielu funkcji różniących się zestawem argumentów."
Ponieważ w PHP nie ma mechanizmu, który by to robił od ręki, efekt taki uzyskać można w taki sposób jak napisałem. Były wspomniane funkcje o zmiennej liczbie parametrów (variadic) - i to też można wykorzystać, gdy za wszelką cenę chcemy zmapować kod np. Javy na PHP.
Zanim je*niesz następny raz, napisz gdzie widzisz różnice w uzyskiwanych wynikach działania funkcji, poza oczywistymi, jak sprawdzenie typów podczas wykonania a nie kompilacji.
konto usunięte
Temat: przeciążenie funkcji
del.Marcin Baran edytował(a) ten post dnia 13.09.11 o godzinie 22:55Artur Świerc Programista PHP/Java
Temat: przeciążenie funkcji
Marcin Baran:
...
W PHP niestety trzeba używać strategii albo ifować argumenty jeśli chcemy osiągnąć funkcjonalność przeciążania metod taką jak mamy w Javie. Nawet __call'em inaczej tego nie rozwiążemy.
//edit po tym jak odpowiedziałem na Twój post :) Artur Świerc edytował(a) ten post dnia 13.09.11 o godzinie 22:59
Piotr
Rybałtowski
Programista PHP,
Symfony, Zend
Expressive, Node.js
Temat: przeciążenie funkcji
Jestem bardzo ciekawy jak wygląda oryginalny kod, którym chwalił się tamten programista w PHP. :) Jest szansa na małą publikację?konto usunięte
Temat: przeciążenie funkcji
Piotrek Rybałtowski:
Jestem bardzo ciekawy jak wygląda oryginalny kod, którym chwalił się tamten programista w PHP. :) Jest szansa na małą publikację?
Przyłączam się.
konto usunięte
Temat: przeciążenie funkcji
.Paweł Koch edytował(a) ten post dnia 18.04.12 o godzinie 15:48Jakub L. Programista
Temat: przeciążenie funkcji
A teoria z przykładami omówiona została.konto usunięte
Temat: przeciążenie funkcji
Tak z ręką na sercu, to mógłbym napisać coś takiego:
namespace \integers {
function add($a, $b) {
// cos tam se robi
}
}
namespace \strings {
function add($a, $b) {
// cos tam se robi
}
}
Ale to i tak jest brąz, ktoś tam pisał że w PHP jest przeciążenie metod za pomocą magi __call() i __callStatic(), ja się z tym nie zgodzę, ponieważ sam manual php mówi o:
PHP's interpretation of "overloading" is different than most object oriented languages. Overloading traditionally provides the ability to have multiple methods with the same name but different quantities and types of arguments.
Czyli jeżeli przeciążenie w php przy obiektowości jest inne niż definicja samego przeciążenia funkcji, metod. To to nie powinno się nazywać przeciążeniem. Błędna nazwa, założę się że nie wymyślili niczego lepszego, w samym php nie ma przeciążenia (o tym pisał Łukasz Cepa Cepowski) a ktoś na bank będzie szukał w google: "php overloading" to utworzyli pod taką nazwą stronę w manualu.
Co do tych metod magicznych __call to już im bliżej do meta-programowanego punktu wyjścia niż do przeciążenia.
Podobne tematy
-
PHP » zamiana tagów w stringach z wykorzystaiem funkcji... -
-
PHP » Szukam programisty do aktualizacji strony / wdrożenia... -
-
PHP » Wykonywanie funkcji/kodu w konkretnym czasie -
-
PHP » Zdefiniowane argumenty funkcji/metody -
-
PHP » Zlecenie dodania nowych funkcji -
-
PHP » Wykorzystanie procedur i funkcji po stronie MySQL w... -
-
PHP » totalne zacmienie... nazwa funkcji -
-
PHP » moduł / controler / akcja - 3 poziomowy dostep do funkcji -
-
PHP » Przekazanie przez wartość parametrów formalmych funkcji... -
Następna dyskusja: