konto usunięte

Temat: przeciążenie funkcji

.Paweł Koch edytował(a) ten post dnia 18.04.12 o godzinie 15:48

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

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.

Ł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.

Łukasz C. Senior Technical
Architect

Temat: przeciążenie funkcji

Łukasz K.:
Nom i... ? ;)
zrobiles kupe na publicznym forum, wstydz sie ;p

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:55
Artur Świerc

Artur Ś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

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:48
Jakub L.

Jakub 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.



Wyślij zaproszenie do