Autor Zpráva
sifik
Profil
Chtěl bych se zeptat (asi spíše filozofická otázka), jak je to s používáním callback funkcí v php? Doporučuje ano nebo ne?

V JS mají díky asynchronnímu programování svůj význam, ale pokud vím, tak php "asynchronismus" nepodporuje.
Mohl by mě někdo do tohoto problému zasvětit? Předem díky.
Darker
Profil
V PHP je jen málo příležitostí, kdy callback potřebuješ. Tam kde to nejde jinak je používání callbacku nutné, leč nepraktické. Zatím jsem na to narazil dvakrát, když jsem složitým algorytmem řadil pole.
sifik
Profil
Mohl by jsi mi prosím objasnit, proč je to nepraktické?

Doporučuješ tedy nepoužívat callback fce, když to není třeba? ..Mně se totiž způsob callback fcí líbí a zdá se mi i docela použitelný, např, tento framework callback používá běžně. Viz routing.
Darker
Profil
sifik:
Mohl by jsi mi prosím objasnit, proč je to nepraktické?
Každou funkci musím definovat ručně v kódu.
Tori
Profil
sifik:
IMHO jde spíš o to, jestli ta konkrétní věc jde udělat i jinými prostředky a co z toho je v dané situaci vhodnější. Např. často jsem využila callback pro všechna nahrazování, kde byla potřeba i nějaká logika (typicky v šablonách). Anonymní funkce v PHP 5.3 a jejich ukládání do proměnných mi připadá i víc podobné javascriptu, než create_function v PHP 5.2 (to vypadá příliš podobně eval a nevíc IDE neumí obarvovat PHP uvnitř řetězce).

Darker:
Každou funkci musím definovat ručně v kódu.
Asi blbá otázka, ale ono to v případě uživatelem definovaných funkcí jde udělat i nějak jinak?
Darker
Profil
Tori:
Asi blbá otázka
Blbě jsem se vyjádřil. Měl jsem namysli nemožnost vytváření anonymních funkcí, a jak se zdá, mýlil jsem se.
sifik
Profil
Tori:
Anonymní funkce v PHP 5.3 a jejich ukládání do proměnných mi připadá i víc podobné javascriptu
To v každém případě.

Právě z JS jsem si oblíbil styl zápisu:

Callback::call('params', function($string){
        return $string;
    });

Šlo mi hlavně o to, zda to má i své mouchy. (pravděpodobně ne, doufám :-))

logika (typicky v šablonách)
mohla by jsi poskytnou nějaký příklad?
Tori
Profil
* [page=21]titulek[/page] => <a href="url-z-databaze-podle-ID-21">titulek</a>
* [page=21/] => <a href="url-z-databaze">titulek podle aktuálně nastaveného jazyka, z DB</a>
* převod Příjmení, Jméno na J. Příjmení (bez zkracování predikátů či příjmení z více částí)
* překlad datumů na text s ošetřením nulových částí (2012-05-03 => 3. května 2012, ale 2012-05-00 => květen 2012)
* doplňování kontextové nápovědy k bibliografii (např. "Název knihy (BB 2012)" => <i>Název knihy</i> (<span class="vysvětlivka" title="básnická sbírka">BB</span> 2012)
... atd., cokoliv, kde se nedá použít napevno definované nahrazení 1:1 a str/preg_replace
Jan Tvrdík
Profil
sifik:
Chtěl bych se zeptat (asi spíše filozofická otázka), jak je to s používáním callback funkcí v php?
Callbacky se v PHP používají zcela běžně, ale na rozdíl od JS netvoří v PHP základní stavební kámen. Od PHP 5.3 jsou navíc k dispozici anonymní funkce, které jsou dále vylepšeny v PHP 5.4 (automatické předávání $this).

Šlo mi hlavně o to, zda to má i své mouchy.
Callbacky jako anonymní funkce představují velmi silnou zbraň ve spolupráci např. s funkcemi jako array_map, array_filter, array_reduce nebo array_walk. Nicméně takto napsaný kód je o něco pomalejší, takže v kritických částech aplikace je dobré se těmto funkcím vyhnout.
sifik
Profil
Super, díky moc za objasnění.

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: