The PHP WTF
Článek byl psán jako Aprílové povyražení a není tedy myšlen vážně.
Na webu najdete spoustu návodů a rad k programování (mnohde včetně použitelných ukázek), ať už obecných nebo těch zaměřených přímo na PHP. Jeden z nejlepších serverů tohoto druhu, se kterými jsem se setkal, je The PHP WTF. Kromě ukázek kódu, které jsou ihned použitelné v praxi, poskytuje i kvalitní výklad problematiky. Podívejte se třeba na to, jak lze otestovat lichost nebo sudost čísla:
<?php // test lichého čísla if ($x/2 != floor($x/2)) { // liché číslo } // test sudého čísla function IsEven($num) { if ($num < 0) return IsEven(-$num); if ($num > 1) return IsEven($num-2); if ($num == 1) return 0; else return 1; } ?>
Obzvlášť druhý příklad se mi jeví velice elegantní a efektivní a ve své aplikaci bych neváhal ho použít bez jakýchkoliv úprav tak, jak je.
Jakub Vrána, Ze zákulisí
Diskuse
 Yuhů:
 Yuhů: 
Druhý příklad je obzvláště zdařilý. Myslím, že by se mohl na přednáškách uvádět jako klasický příklad na rekurzi. Píšu si to do poznámek.
 Yuhů:
 Yuhů: Pavel Zbytovský:
Taky klasický přílad se mi zdá vypisování strukturovaných reakcí v diskusi nebo u komentářů. Funkce se volá se svým id a tím se použije pro všechny děti. Jakub Vrána
 Jakub Vrána   :
: 
Díky za námět, už to mám delší dobu mezi tématy článků.
 Jakub Vrána
 Jakub Vrána   :
: Bohumír Bednařík (BoboCop):
Je to opravdu pěkný příklad rekurze. Musel jsem nad tím sice chviličku přemýšlet, než jsem to pochopil, ale po pak jsem si uvědomil, že je to vlastně velice jednoduché a přitom funkční. Nicméně si nejsem úplně jist tím, jestli by nebylo rychlejší číslo podělit dvěma a zjišťovat zbytek po dělení. Přeci jen u větších čísel by tato funkce mohla být relativně pomalá (alespoň si to myslím - příliš mnoho operací, které by mohly být nahrazeny dvěma - dělení a zjištění zbytku po dělení).Joe:
Ja myslim, ze lepsi nez rekurzivni reseni je urcite obycejna smycka. imho ale zalezi, do jake miry ma interpret php optimalizovany takove postupy.<?php
function IsEven($num)
{
$num = ($num<0)?-$num:$num;
$even = true; while($num-->0) $even = !$even;
return $even;
}
?>
puco:
Ta rekurzia je mozno pekny priklad ale urcite by som to nepuzival. Preco nepouzit function IsEven($num){ return ($num % 2)?0:1; }. Ta rekurzia mi pripomina prolog.
puco:
ze ja sa nepozrem do kalendara aky je datum a potom to tak vypadaJakub Podhorský:
imho by to mělo vracet true a false a ne 1 a 0 :)pif: 
asi tak, nechapu proc delat veci slozite kdyz to jde na jeden radek :)
//pomineme ze se to hodi tak na prednasku
 llook:
 llook: 
What the f***?
 llook:
 llook: Jakub Podhorský:
mimochodem ještě k The PHP WTF.....ten článek není o tom jak efektivně zjistit lichost nebo sudost čísla ale poukazuje přesně na to jak se to dělat nemá...proč používat zbytečně složitou a pomalou rekurzi když to všechno zvádnu pomocí operátorůjak zde už zaznělo je to krásný příklad toho jak se používá rekurze ale používat to v provozu? děkuji ne zbytečně to prodlužuje kód
 Jakub Vrána
 Jakub Vrána   :
: 
Lidi, vždyť to byl Apríl. Takhle pitomý způsob zjišťování lichého čísla samozřejmě nemůže nikdo myslet vážně a rozhodně se nehodí ani na přednášku.
 Jakub Vrána
 Jakub Vrána   :
: Joe:
v zadnem pripade se neda souhlasit s tim, ze je to "krasny priklad rekurze". jestlize mi funkce ve svem tele zmeni svuj obsah a zavola se znovu jen aby se podminka volani preskocila, po navratu z5 se vykonal znovu zbytecne kod neni rekurze, ale cista pomsta svemu hostingu :)Tomáš:
Mě se jako nejrychlejší způsob jeví:<?php
function isEven($num) { return ($num & 1)==0; }
?>
pif: 
taky díky za tu inspirativní sajtu s code snippets (PHP WTF), je tam spousta nápadů, který se budou hodit! super
jenom nevím proč se menuje tak difně
pif: 
kdo to tady pise za me?
 Jakub Vrána
 Jakub Vrána   :
: 
Můžu ti říct jenom tolik, že to byl někdo z adresy ch-81-1.coolhousing.cz. Mohl to ale být nějaký tvůj jmenovec.
 Jakub Vrána
 Jakub Vrána   :
: sh:
jen takovy dotaz neslo by na zjisteni sudeho cisla pouzit taky ten prvni priklad akorat misto != by tam mohlo byt ==<?php
if ($x/2 == floor($x/2)) {
// sudé číslo
}
?>
 v6ak:
 v6ak: 
Určitě, ale toto je kód spíš pro pobavení. Samozřejmě, nejlepším způsobem bude asi modulo dělení: $x%2 == 0 pro sudé a analogicky pro liché.
BTW: Škoda, že ten server tu už není :(
 v6ak:
 v6ak: Diskuse je zrušena z důvodu spamu.
 © 2005-2025 Jakub Vrána.
Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení
© 2005-2025 Jakub Vrána.
Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení  .
Můžeme si tykat.
Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset.
Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.
.
Můžeme si tykat.
Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset.
Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.


