Zastanawiam się, czy jedną z kluczowych cech języka programowania jest możliwość przeciążania funkcji argumentami. Myślę, że jest to niezbędne w kontekście programowania obiektowego.
Czy jest to celowo pozostawione w tyle i niedozwolone? Czy przeciążanie nie jest dobrą praktyką?
php
method-overloading
użytkownik1179459
źródło
źródło
Odpowiedzi:
Kto powiedział ci, że PHP nie obsługuje przeciążania funkcji? !!!
W rzeczywistości PHP obsługuje przeciążanie funkcji, ale w inny sposób. Funkcje przeciążania PHP różnią się od Java:
Sprawdź następujące bloki kodu.
Funkcja znajdująca sumę n liczb:
Funkcja dodawania dwóch liczb lub łączenia dwóch ciągów:
Podejście obiektowe, w tym przeciążenie metod:
Patrz: http://php.net/manual/en/language.oop5.overloading.php
W PHP, przeciążenia środki można dodać członków obiektu w czasie wykonywania, poprzez wdrożenie niektórych magicznych metod, takich jak
__set
,__get
,__call
itd.źródło
findSum(10, "steve", { 86, "2012-09-20" });
. Prawdziwe przeciążenie pozwoliłoby na nowe parametry różnych typów.Nie pełne wsparcie „tradycyjnego przeciążenia”, tylko częściowe .
Uwaga: druga część tej definicji jest zwykle kojarzona ze statycznymi typami języków programowania, które wykonują sprawdzanie typów i / lub sprawdzanie poprawności , aby wybrać poprawną deklarację. PHP nie jest językiem o typie statycznym, jest dynamiczny i używa słabego pisania .
WSPARCIE PHP :
TAK, umożliwia wywołanie wielu metod o tej samej nazwie, ale różnych ilościach . Zobacz func_get_args i odpowiedź @rajukoyilandy, możemy użyć
f(x)
if(x,y)
.TAK, umożliwia wywołanie wielu metod o tej samej nazwie, ale różnych typach . Zobacz wewnętrzne użycie gettype w metodzie.
NIE zapewnia możliwości deklarowania wielu metod o tej samej nazwie, ale różnych ilościach . Jest tak, ponieważ możemy zadzwonić
f(x)
if(x,y)
z tą samąf
deklaracją.NIE zapewnia możliwości deklarowania wielu metod o tej samej nazwie, ale różnych typach . Wynika to z faktu, że kompilator PHP musi interpretować
f($integer,$string)
tę samą funkcję, cof($string,$integer)
.Zobacz także dokumentację przeciążania PHP5, aby uzyskać wyjaśnienia dotyczące „nietradycyjnego przeciążania”.
źródło