Autor Zpráva
KubaFibi
Profil
Dobrý den,
narazil jsem na tento problém v souvisloti s OOP. Zajímalo by mě, který postup preferujete při tomto problému? Např. když by jsme měli metodu:

function funkce($parametr) {...}
Řekněme, že $parametr musí být třeba pole - jakou metodu byste zvolili? Popř. jaká se hodí víc do OOP a jaká do procedurálního PG.

1) Deklarovat typ ve funkci (function funkce(array $parametr) {...}) a $parametr ošetřit před voláním funkce jako např v Javě.
2) Bez typu (<? function funkce($parametr) {...}) a $parametr ošetřit ve funkci.

Ve škole se učíme Javu a odtud vím, že se v Javě musí deklarovat typy, takže tam je to jasné. V PHP se to nemusí. Do teď jsem to psal 2. způsobem, připadá mi lepší, protože tam nejsou zbytečně duplicitní kódy - např. když bych některou funkci volal 10x, tak nemusím 10x psát ošetření. 1. způsobem bych musel všechno ošetřovat zvlášť. Na druhou stranu zase stále někde slyším, jak si někdo stěžuje na to, že PHP není přísně typové, narozdíl třeba od Javy. Tak jsem z toho trochu zmatený.
Snad jsem vysvětlil dobře a děkuji veškeré názory a rady.
ShiraNai7
Profil
KubaFibi:
Popř. jaká se hodí víc do OOP a jaká do procedurálního PG.

Nesouvisí to přímo s OOP. Dostupný type hinting můžeš využít i ve funkcích mimo třídy. Pokud je nutné validovat i ostatní typy (string, int, null, ...), je třeba to dělat "ručně" (tvá možnost 2.). Ale využití dostupných type-hintů (třída/interface, callable, array) bys měl využít a neošetřovat to po svém.
Tori
Profil
KubaFibi:
Je ta metoda schopná pracovat i s jiným datovým typem, případně si ho (třeba v případě čísel a řetězce) převést na pole?
KubaFibi
Profil
Tak to lecos vysvětluje. Lidi si stěžují na ne/přísnost PHP asi právě proto, že není kompletní. Původně jsem si totiž myslel, že je type hinting u všech typů, ale je nepovinný.

Takže např. int ošetřím ve funkci, ale array před voláním funkce. Je to takové nejednotné, což mě mate a moc se mi nelíbí.

Jinak díky za vysvětlení a doufám, že si na to zvyknu.
Majkl578
Profil
KubaFibi:
Takže např. int ošetřím ve funkci, ale array před voláním funkce. Je to takové nejednotné, což mě mate a moc se mi nelíbí.
Ono to má poměrně jednoduchou myšlenku, říká se tomu weak (nebo loose) typing.
Typy jako int, string apod. jsou skalární, tudíž jsou dle filozofie PHP zaměnitelné/přetypovatelné (což ale nezamená bezztrátové), říká se tomu type juggling. Oproti tomu array už je komplexní typ, který např. za int zaměnit nejde -- pokud bych měl následující pole: [1, 2, 3], jaká bude jeho číselná reprezentace? Těžko říct. Totéž vpodstatě platí i pro objekty.

Obecně ale nelze jednoznačně říct, zda je to výhoda či nevýhoda oproti např. Javě. Každé má svá pro a proti, PHP je například mnohem dynamičtější a přímočařejší.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: