Temat: przeciążenie funkcji
Michał Wachowski:
Dariusz Półtorak:
Właściwie jedyne co by dało dorzucenie solidnego przeciążania w PHP to poprawienie czytelności kodu. Ale znowu przeciążanie nie ma większego sensu ze względu na to że w parametrze jedyne co możemy wymusić to obiekt lub tablicę.
Jak to mówili starożytni grecy - bullshit.
Wymusić możesz tablicę, obiekt, interfejs, klasę obiektu i pewnie jeszcze coś co pominąłem.
Nie możesz string'a, inta, floata, boolean'a, z którymi problemu nie ma (int) 'bla bla' == 0 :)
Przeciążanie nie tylko poprawiło by czytelność ale i pracę z kodem.
Nie trzeba wtedy operować na dwóch metodach (wywołującej i "czyniącej") a jedynie na "czyniącej".
1. Klasa/intefejs, nie wyszczególniałem. Zresztą powinienem napisać klasa a nie obiekt...
2. Tablica
Przecież to napisałem. Więc czemu mówisz "bullshit". Nie możesz wymusić stringa, inta, floata, boolean itp. Sam to napisałeś.
To teraz mi proszę Michale wytłumacz. JAK miało by działać przeciążanie w takim wypadku:
public function add($a, $b) {
// troszkę kodu który łączy 2 ciągi znaków
}
public function add($a, $b) {
// troszkę kodu który dodaje 2 liczby CAŁKOWITE
}
1. PHP NIE JEST W STANIE określić którą z tych metod chcę wywołać bo nic na to nie wskazuje. Chyba że by jakoś badał kod metody i "zgadywał". Równie dobrze może wróżyć z fusów.
2. PHP NIE JEST W STANIE zapobiec przekazaniu np 2 obiektów albo 2 wartości zmiennoprzecinkowych itp w tym wypadku. Mogę ? Mogę i przejdzie.
3. Co mi da w tym wypadku "(int)tra la la la" ?? Walidację wewnątrz. Gdzie nie była by ona potrzebna gdybym typy proste mogły być wymuszane w parametrach metod tak jak to jest z klasą, interfejsem i tablicą.
Także wytłumacz mi jak wg Ciebie PHP powinien zdecydować którą metodę ma wykonać na podstawie parametrów gdybyśmy tam zaimplementowali normalne przeciążanie ? Mówisz "bullshit" więc zakładam że wiesz.
Dariusz Półtorak edytował(a) ten post dnia 15.09.11 o godzinie 10:25