Overloading rubrika: Programování: PHP

3 MartinKravec
položil/-a 16.9.2013
 
upravil/-a 16.9.2013

Zdravím, je možné v PHP preťažovať metody ako v C++ a Jave?

public function getArticles($langID);
public function getArticles($langID, $limit);

Podla tohoto asi nie:
Fatal error: Cannot redeclare ArticleAPI::getArticles()

V PHP manuále sa píše:
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.

Ako to mám teda vyriešiť?

odkaz
6 Michal Vyšinský
odpověděl/-a 16.9.2013
 
upravil/-a 16.9.2013

Toto opravdu v PHP nejde. Jediné řešení je použít tu delší variantu a nastavit implicitní hodnotu na limit. Poté uvnitř metody if-ovat

Komentáře

  • MartinKravec : To mi príde ako dosť škaredé riešnie oproti ozajstným OOP jazykom. Keď už to tak je, tak nech ľudia aspoň nepíšu na internet vety typu Since the introduction of PHP 5 in 2004, PHP has had an object model worthy of that description and became a truly modern language for use on the web 16.9.2013
  • Anonym : jak souvisí overloading s OOP? 16.9.2013
  • MartinKravec : Bavíme sa teraz o metodách. 16.9.2013
  • Anonym : tak jinak, jaký má overloading metod přesně vliv na odlišnost objetového modelu PHP od C++ nebo Javy? 16.9.2013
  • MartinKravec : Třeba ten, že v php musím používať oveľa viac func_get_arg(), func_get_args(),func_num_args() a ifovať. Je určite elegantnejšie to riešiť tak ako v C++ a Jave. 16.9.2013
  • Anonym : Jenže PHP bylo dříve Personal Home Page Construction Kit (1995) a až v roce 1997 došlo na PHP: Hypertext Preprocessor, zkrátka z krategorie pro kutily PHP povýšilo ale návrh zůstal tak jak zůstal. JAVA taky až za dlouho zavedla typové kontejnery (zlatý class Vector, jak se s ním krásně programoval Snake na rozdíl od pevného pole v Pascalu xD) 16.9.2013
  • MartinKravec : Jono, ale my sa bavíme o tom, že o PHP píšu ako o plne objektovom jazyku. A to on není. 16.9.2013
  • Anonym : Ale ono PHP je objektové, overloading nesouvisí s OOP. Overloading můžete používat i ve funkcionalistickém programování. 16.9.2013
  • MartinKravec : Ja sa nehádam, overloading sa viaže na funkcie. Ale metody su tiež funkcie, a teraz riešime len a len overloading metod, overloading na urovni OOP tak ako sa to učí pri každom OOP jazyku. Aby sme to zhrnuli, PHP nevie overloading, ani navratove hodnoty ani urcovanie typov parametrov, no aj tak je objektový. Ne ale plne objektový. Je to vec pohľadu a neni nutne to preto dalej riesit. 16.9.2013
  • Anonym : Myslím, že se problém overloadingu dá řešit i pěkně objektově a neifovat... Chce to jen umět psát jako v objektových jazycích a ne šmudlat jako v C++ nebo Javě. 16.9.2013
  • dzejkob : Můžete mi někdo upřesnit, jak výšeuvedený problém vyřešit objektově tak, aby se nikde "neifovalo"? 17.9.2013
  • Anonym : Polymorfismus a delegace. 17.9.2013
  • Michal Vyšinský : Osobně bych použil nějaký query builder, takže by to mohlo vypadat nakonec takto: $qb->getArticles($langID)->limit($limit)->fetch() 17.9.2013
  • Anonym : Jinak tento konkrétní scénář asi tak... http://rarous.net/weblog/377-domenove-dotazy.aspx 17.9.2013
  • kohven : K tomu jestli je PHP objektové nebo ne: IMO je PHP objektově orientované. Stejně tak jako třeba Java. Plně objektový je např. smalltalk, kde i řídící struktury jsou objekt. Overloading s OOP opravdu nesouvisí. Možná za to může zmatení pojmů s override. 17.9.2013
  • smate : Keby sme to zobrali do extremu ani Java nie je plne objektovy jazyk 20.9.2013
  • xxar3s : MartinKravec overloading vobec nesuvisi s OOP overloading mas aj v proceduralnych jazykoch, priamo s OOP suvisi overriding metod. 20.9.2013

Pro zobrazení všech 5 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.