Pochodzący z C ++;)
Jak mogę przeciążać funkcje PHP?
Jedna definicja funkcji, jeśli istnieją argumenty, a druga, jeśli nie ma argumentów? Czy jest to możliwe w PHP? Czy powinienem użyć jeśli jeszcze, aby sprawdzić, czy są jakieś parametry przekazane z $ _GET i POST? i powiązać je?
php
arguments
overloading
Vamsi Krishna B.
źródło
źródło
overloading
, niż jest zadawane w pytaniu. (Aby uzyskać więcej informacji, zobacz zaakceptowaną odpowiedź).Odpowiedzi:
Nie można przeciążać funkcji PHP. Podpisy funkcji oparte są tylko na ich nazwach i nie zawierają list argumentów, więc nie można mieć dwóch funkcji o tej samej nazwie. Przeciążanie metod klasowych różni się w PHP niż w wielu innych językach. PHP używa tego samego słowa, ale opisuje inny wzorzec.
Można jednak zadeklarować funkcję wariadyczną, która przyjmuje zmienną liczbę argumentów. Użyłbyś
func_num_args()
i,func_get_arg()
aby przekazać argumenty i użyć ich normalnie.Na przykład:
źródło
myFunc(/*...*/)
.PHP nie obsługuje przeciążania tradycyjnych metod, jednak jednym ze sposobów, w jaki możesz osiągnąć to, co chcesz, byłoby użycie
__call
magicznej metody:źródło
__call()
wcześniej. Dość kreatywny (choć trochę gadatliwy)! +1Aby przeładować funkcję, po prostu podaj domyślnie parametr null,
źródło
overload
funkcji - niemniej jednak robisz użyteczny punkt o których czytelnicy powinni wiedzieć.Dla niektórych może to być hacking, ale nauczyłem się w ten sposób, jak Cakephp wykonuje niektóre funkcje i dostosowałem go, ponieważ podoba mi się elastyczność, jaką zapewnia
Chodzi o to, że masz różnego rodzaju argumenty, tablice, obiekty itp., A następnie wykrywasz to, co przeszedłeś i stamtąd
źródło
źródło
A co z tym:
źródło
W PHP 5.6 można użyć operatora ikona
...
jako ostatni parametr i pozbyć sięfunc_get_args()
ifunc_num_args()
:Możesz go również użyć do rozpakowania argumentów:
Jest równa:
źródło
źródło
PHP na razie nie obsługuje przeładowywania. Mam nadzieję, że zostanie to zaimplementowane w innych wersjach, takich jak inne języki programowania.
Zapoznaj się z tą biblioteką, to pozwoli ci użyć przeciążenia PHP pod względem zamknięć. https://github.com/Sahil-Gulati/Overloading
źródło
Niestety nie ma przeciążenia w PHP, jak dzieje się to w C #. Ale mam małą sztuczkę. Deklaruję argumenty z domyślnymi wartościami null i sprawdzam je w funkcji. W ten sposób moja funkcja może robić różne rzeczy w zależności od argumentów. Poniżej znajduje się prosty przykład:
źródło