Autor Zpráva
Joker
Profil
Autor: Joker
Odkaz na aktuální verzi textu: Základní kurz 10: Podmínky
zveřejněno
Odkud se vede diskuse k aktuálnímu stavu textu:
První příspěvek po poslední revizi textu

Jako vždy, připomínky velmi vítány.
mimochodec
Profil
Překlepy a chyby v textu:

Zatím jsme si rozlišení toho, zda podmínka je splněna, nebo není.

Není-li podmínka splněna, vyhodnocují se postupně jednotlivé podmínky elseif v pořadí, v jakém jsou v kódu napsané a provede se první, jejíž podmínka je splněna.
Přeformuloval bych, to slovo "podmínka" je tady použito tak, jako by šlo o "podmínku podmínky".

- vždy místo něj napište komentář, že byl vynechán záměrně (chybí tečka)
- kolik calých hodin
Alphard
Profil
Podmínka začíná klíčovým slovem if, následuje v závorkách výraz nebo hodnota určující samotnou podmínku
(závorky nejsou povinné, ale pro lepší přehlednost je budeme uvádět), která má být splněna a pak kód, který se provede
v případě splnění podmínky.

Větu chápu tak, že nejsou povinné kulaté závorky kolem výrazu pro porovnání, ty ale dle mně dostupných informací povinné jsou.

lze otočit
Zní to divně, výraz negovat je vážně nepochopitelný?

$hlaska = "";
Tento příkaz je vzhledem k dalšímu kódu neužitečný. Sice nevadí, ale aby nemátl někoho, kdo zná jazyk vyžadující deklarace proměnných.

$modulo = $cislo % 4; // operátor modulo, tedy zbytek po dělení
switch($modulo) {
Jde ti o maximální přehlednost, ale zbytečně bych nevytahoval vše do proměnných. Naopak by neškodilo pár ukázek se složitejší podmínkou, kromě switch($cislo%4) třeba i if (a($b) && $c != $d)

Je to ovšem na úkor přehlednosti kódu, takové řešení je náchylné k zanesení chyb a špatně se udržuje, proto ho nelze doporučit.
Možná dodat vám ho zatím nelze doporučit. Až budou zkušenější, nebudou takovou trivialitu rozepisovat na deset řádků, zvlášť v šabloně.
Joker
Profil
mimochodec:
Díky, opravím

Alphard:
Větu chápu tak, že nejsou povinné kulaté závorky kolem výrazu pro porovnání, ty ale dle mně dostupných informací povinné jsou.
Jo, je to špatně, vyškrtnu.

Zní to divně, výraz negovat je vážně nepochopitelný?
Mně to nezní divně, ale „negovat“ by taky šlo použít.

Tento příkaz je vzhledem k dalšímu kódu neužitečný. Sice nevadí, ale aby nemátl někoho, kdo zná jazyk vyžadující deklarace proměnných.
Asi ano, jen mi vždycky přijde „divné“, když se pracuje s proměnnou definovanou jen ve větvi podmínky.
V praxi by mi (když tedy vynechám podmíněný operátor) přišlo možná i lepší si do proměnné nastavit (předpokládanou) častější variantu a pak udělat jen podmínku na tu méně častou. Ale to by zas nebylo moc názorné.

by neškodilo pár ukázek se složitejší podmínkou
Popřemýšlím o tom, ale do složitějších konstrukcí a volání funkcí uvnitř podmínek jsem nechtěl zabředávat, protože bych se v rámci základního kurzu rád vyhnul problematice nevyhodnocení druhého operandu and/or v případě, že výsledek je určený už tím prvním.
To mi přijde už jako pokročilejší téma.

Až budou zkušenější, nebudou takovou trivialitu rozepisovat na deset řádků, zvlášť v šabloně.
Toť otázka, mně přijde ta ukázka:
echo ($cislo == 10) ? "rovno 10" : (($cislo > 10) ? "větší než 10" : "menší než 10");
už je na hraně a ještě složitějším konstrukcím bych se asi vyhnul.
Mimochodem, jak jsem přišel na postřeh, že „Stačí ale např. zapomenout závorky kolem druhého podmíněného operátoru a kód nebude fungovat správně“?
Samozřejmě tak, že přesně tohle se mi při tvorbě a zkoušení toho příkladu stalo :-)
Alphard
Profil
Joker:
Mně to nezní divně, ale ‚negovat‘ by taky šlo použít.
Já jsem asi už deformovaný svým okolím, ale např. nutnost rozlišovat obměněnou implikaci a obrácenou implikaci u mě vede k nejistotě při užití přesně nedefinovaného jako 'otočení' :-) Ale pro začátečníky budiž, nepíšeš matematická skripta.

a pak udělat jen podmínku na tu méně častou
Rozumím všemu, co říkáš. Z pohledu defenzivního programování bych to tam nechal, když se někdy smaže else větev, nebude problém. Šlo mi jen o tu názornost, předkládám k diskusi.

Samozřejmě tak, že přesně tohle se mi při tvorbě a zkoušení toho příkladu stalo :-)
Tak se člověk učí, já jsem myslím na tohle kdysi přišel taky při až pri programování něčeho. Ale jak jsem psal výše, pro pokročilého programátora je tohle samozřejmost, je důležitější mít přehledný algoritmus jako celek. Jestli to nevyčlením do samostatné funkce, dám to na jeden řádek, tohle není teoretizování, občas dělám i horší věci :-)

PS: Jak se začne psát pokročilejší část, určitě se zapojím, ale to se pak ozvu v patřičném vlákně.
Jan Tvrdík
Profil
• „závorky nejsou povinné, ale pro lepší přehlednost je budeme uvádět“ – tohle je blbost, závorky obalující podmínku jsou povinné
• Používáš nekonzistentní formátování kódu. Za if patří mezera.
• „Vhodnější formátování kódu v takovém případě je“ – preferoval bych variantu se závorkami
if ($podminka) {
    echo "Něco ";
}
echo "Něco jiného ";
• Nekonzistentně uvádíš resp. neuvádíš <?php a ?>
• Funkci file_exists bych nahradil za is_file, protože file_exists vrací true i pro adresáře
• „vypsat uživateli hlášku o existenci určitého souboru“ – vyhodil bych inicializace $hlaska na ""
• „všimněte si také použití operátoru pro spojení řetězců v posledním výpisu“ – špatný příklad, nepoužití toho operátoru je tady výrazně přehlednější. Pokud ho chceš ukázat, vyber si situaci, kdy dává smysl:
$soubor = "prvni.php";
echo "Stav souboru $soubor:" . (is_file($soubor) ? "dostupný" : "nenalezen");
• „vhodný jen pro určité, výše zmíněné, situace“ – žádné situace výše nezmiňuješ, lépe „vhodný jen pro určité situace“
• „Zatím jsme si rozlišení toho, zda podmínka je splněna, nebo není. “ – nekompletní věta
• „kolik calých hodin“
Joker
Profil
Připomínky zapracovány, aktuální verze: php.it-joker.cz/?uri=zakladni-kurz/10-podminky
Joker
Profil
Zveřejnil jsem 10. kapitolu (i když zatím chybí 9. kapitola).
Kubo2
Profil
Joker:
Zveřejnil jsem 10. kapitolu (i když zatím chybí 9. kapitola).
Perfektné. :-) No dovolím si napísať ti niekoľko pripomienok, zhora dolu, tak ako som na pripomienkované body narazil pri čítaní:

Naučili jsme se hodnoty proměnných používat ve výpočtech
Výraz výpočet mi príde mierne zavádzajúci. Ako napríklad vykonávaš výpočty s reťazcami? Súhrnne by som asi použil termín operácia (česky operace) z trojice operátor-operand-operácia. Tieto tri termíny sú docela jasne vysvetlené hneď v prvom odstavci kapitoly o operátoroch, takže by s tým nemal byť u čitateľov problém.

Zápis podmínky v PHP
Ten prvý príklad by som asi trocha viac rozobral polopate, pretože mnoho začiatočníkov (vrátane vlastnej skúsenosti) nepochopí, ako naozaj funguje if(true) {...} resp. if($podminka) {...}, ak je premenná $podminka inicializovaná hodnotou true. V tejto súvislosti by som asi dal aj premennej $podminka popisnejší identifikátor, povedzme $logickaHodnota, pretože je zjavné, že premenná $podminka už žiadnu podmienku neobsahuje a mohol by tu nastať skôr opísaný kameň úrazu.

Jestliže je v bloku jediný příkaz, tak jako v příkladu výše, není povinné ho uzavírat do složených závorek.
Informáciu o možnosti vynechania zložených zátvoriek by som zo základného kurzu úplne vyhodil a len tak mimovoľne sa o tom zmienil až v niektorej kapitole pokročilej časti (a to iba z dôvodu, aby začiatočník mal povedomie o existencii niečoho takého, ale už bol naučený nepoužívať to). Uvedená konštrukcia a jej obdoby totiž spôsobujú iba rad problémov a pre začiatočníkov značnú neprehľadnosť v kóde.

S tím souvisí i další věc: Za definici podmínky nikdy nedávejte středník!
K tomu by asi nebolo zlé uviesť ešte jeden príklad spomenutej záludnosti:
<?php
if(false);
{
    echo("Outputs always");
}
Uvedený príklad je taktiež syntakticky správne, no logicky chybne a kto nepozná PHP, tak mu to môže zabrať dlhé hodiny, pokým na niečo také príde. Ale možno by nebolo zlé v závere to zmieniť ako cvičenie, či si čitateľ z článku zapamätal, prečo to tak je. :-)

Když je řeč o přehlednosti kódu (...) při splnění podmínky nechcete udělat nic a máte jen kód pro nesplnění. (...) Méně přehledné řešení:
Možno by bolo vhodné tú prehľadnosť demonštrovať na dvoch riadkoch:
<?php
if(false); else echo "false - podmienka (ne)splnená";
if(!false) echo "false - podmienka (ne)splnená";
A čitateľovi položiť rečnícku otázku, ktorý spôsob sa mu zdá prehľadnejší. V krátkej dobe príde na to sám, prečo je lepšie používať ten druhý spôsob.

Pak můžete za podmínkou místo else uvést elseif, další podmínku a blok kódu.
Namiesto neštandardného kľúčového slova elseif by som zmienil možnosť uviesť ďaľšiu podmienku za kľúčovým slovom else. Mám taký pocit, že keď je čitateľ už zvyknutý z predchádzajúceho textu na podmienku, ktorej zápis začína kľúčovým slovom if a logickým výrazom v guľatých zátvorkách, nie je vhodné ho miasť ďaľšou možnosťou zápisu podmienky. Zmienil by som to takisto až niekde ďalej v časti Programujeme v PHP s krátkym vysvetlením.


Súhrnne by som ešte dodal pár vecí:
1\ Obaliť všetky hodnoty, ktoré sú súčasťou článku a majú nejakú súvislosť s PHP kódom, značkou <code> - tj. napríklad namiesto false písať false apod.
2\ Nejako zvýrazniť číselné odrážky v texte a podobné breakpointy.

Inak celkom pekný článok, ale šlo by ho vylepšiť. :-)
Joker
Profil
Kubo2:
Výraz výpočet mi príde mierne zavádzajúci.
Odborně správný termín by asi měl být „ve výrazech“, ale v textu určeném pro začátečníky mi „ve výpočtech“ přijde srozumitelnější.

Ten prvý príklad by som asi trocha viac rozobral polopate
V jakém směru?
Mělo by tam být víc rozepsané něco jako že se nejdříve vyhodnotí podmínka, pak porovná jestli je true nebo false a podle toho se (ne)provede kód?
Nebo něco jiného?

Informáciu o možnosti vynechania zložených zátvoriek by som zo základného kurzu úplne vyhodil
I to je možnost, ale ta syntaxe se běžně používá a i začátečník by ji měl chápat, když na ni v cizím kódu narazí.
Sice třeba NetBeans IDE ve výchozím nastavení vypuštění složených závorek označí varováním, ale já osobně nemám tak striktní pohled a někdy mi přijde i přehlednější ty závorky vypustit.

K tomu by asi nebolo zlé uviesť ešte jeden príklad spomenutej záludnosti
Vždyť tam příklad je.

Namiesto neštandardného kľúčového slova elseif by som zmienil možnosť uviesť ďaľšiu podmienku za kľúčovým slovom else.
Nemám na to zatím jednoznačný názor.

1\ Obaliť všetky hodnoty, ktoré sú súčasťou článku a majú nejakú súvislosť s PHP kódom, značkou <code> - tj. napríklad namiesto false písať false apod.
Opravil jsem true a false, je tam ještě něco dalšího?

2\ Nejako zvýrazniť číselné odrážky v texte a podobné breakpointy.
V jakém smyslu?
Jinak příklady nejsou číslované odrážky, mají čísla napsaná natvrdo v textu. Zčásti je to záměr, chtěl jsem mít čísla příkladů a řešení „natvrdo“ a ne automaticky generovaná a taky možnost vložit třeba příklad 2a apod.
jenikkozak
Profil
Kubo2:
Informáciu o možnosti vynechania zložených zátvoriek by som zo základného kurzu úplne vyhodil a len tak mimovoľne sa o tom zmienil až v niektorej kapitole pokročilej časti (a to iba z dôvodu, aby začiatočník mal povedomie o existencii niečoho takého, ale už bol naučený nepoužívať to).
Myslím, že začátečník by měl tento způsob zápisu znát, aby jej pochopil, když na něj narazí.

Možno by bolo vhodné tú prehľadnosť demonštrovať na dvoch riadkoch:
<?php
if(false); else echo "false - podmienka (ne)splnená";
Shodli jste se, že ten středník tam nemá co dělat.

> „Pak můžete za podmínkou místo else uvést elseif, další podmínku a blok kódu.“
> Namiesto neštandardného kľúčového slova elseif by som zmienil možnosť uviesť ďaľšiu podmienku za kľúčovým slovom else. Mám taký pocit, že keď je čitateľ už zvyknutý z predchádzajúceho textu na podmienku, ktorej zápis začína kľúčovým slovom if a logickým výrazom v guľatých zátvorkách, nie je vhodné ho miasť ďaľšou možnosťou zápisu podmienky. Zmienil by som to takisto až niekde ďalej v časti Programujeme v PHP s krátkym vysvetlením.
Domnívám se, že začátečník by měl tento způsob zápisu (pomocí v PHP standardního klíčového slova) znát.

Joker:
- U podmíněného operátoru by se mohlo napsat, že se mu také říká ternární operátor.
- Povídání o něm by si zasloužilo oddělení pomocí podnadpisu.

- Chybějící čárky:
[...]následuje v závorkách výraz nebo hodnota určující samotnou podmínku, která má být splněna, a pak kód,
[...]Opět můžete uvedený kód vyzkoušet tak, jak je v příkladu a s prázdným řetězcem v $text.
[...]funkce vrátí true v případě, že soubor existuje, a false pokud neexistuje
[...]Zpracuje se první blok case, který má stejnou hodnotu, jako je u switch.

- Chybějící znak: „Nebo i bez použití proměnné $hlaska:“

- Před větou: „aby to nebylo tak fádní, zároveň se podíváme na další užitečnou funkci, a sice date(),“ alespoň zalom řádek. Ten odstavec už je hodně dlouhý.
- Podobně by bylo dobré zalomit řádky i před číslováním úkolů v části Vyzkoušejte si.

Některé věty se mi zdají být zbytečně komplikované. Ještě se k tomu vrátím…
Joker
Profil
Jelikož jsem nakonec do kapitoly o polích přidal i zmínku o superglobálních polích, do kapitoly o podmínkách jsem doplnil ukázku, kde hodnotu zadává návštěvník stránky a ve skriptu se načítá přes $_GET.


Krom toho jsem zapracoval i připomínky z [#11] jenikkozak, které jsem nezapracoval už dřív a nestaly se irelevantní kvůli jiným změnám v textu.

Jen tato:
[...]následuje v závorkách výraz nebo hodnota určující samotnou podmínku, která má být splněna, a pak kód,

Má tam ta čárka opravdu být? U výčtu zakončeného spojkou „a“ se před ní přece čárka nepíše.
lionel messi
Profil
Joker:
U výčtu zakončeného spojkou ‚a‘ se před ní přece čárka nepíše.
Myslím si, že v tomto prípade čiarka nesúvisí s výpočtom, ale oddeľuje vloženú vzťažnú vetu:

„Pes, ktorý breše, nehryzie.“
„Pes, ktorý sa volal Ben, a mačka Mica piekli tortu.“
mimochodec
Profil
"Chybí ještě jedna důležitá věc, ke které se právě dostáváme: Jak ovlivnit chod samotného skriptu v závislosti na hodnotě nějaké proměnné nebo výsledku nějakého výrazu. Ukážeme si, jak provést či neprovést některou část skriptu v závislosti na hodnotě proměnné nebo výsledku výpočtu." - opakování je matka moudrosti, ale nečte se to dobře. Přeformuloval bych.


"Připomeňme funkci empty, která vrátí true v případě, že proměnná je prázdná nebo není nastavena a jinak false." - tomu nerozumím.

V části "Poměrně častá je specifická situace, kdy chcete do proměnné nastavit jednu ze dvou hodnot podle toho" mi chybí upozornění, že ten postup jen vrací řetězec. Na splnění/nesplnění podmínky nemůžu navázat žádnou jinou akci, tzn. třeba otevření souboru, přiřazení hodnoty dvěma různým proměnným apod.

Překlep "Neo i bez použití proměnné"

"A aby to nebylo tak fádní, zároveň se podíváme na další užitečnou funkci, a sice date()"
Píšeš o podmínkách, pak najednou vytáhneš funkci date, věnuješ čtyři řádky jejímu popisu a až po tom všem vyjde jakžtakž najevo, proč sis na ni vzpomněl: "Ukažme si tedy kód, který vypíše denní dobu". Navíc "aby to nebylo tak fádní" jakoby spíš navozuje pocit "teď jsem psal o podmínkách, psal jsem o pěti řešeních, ale teď vám ukážu šesté, to je taková specialitka." Pak ale neukážeš šesté, ale konkrétní využití elseif. To se dle mě hodí, ale uvedl bych to jiným způsobem.


"Někdy chcete testovat výčet hodnot nějaké proměnné" ... krkolomné, divné. Myslím, že jsem nikdy nechtěl testovat výčet hodnot. Ale přiznávám, že teď mě vhodnější formulace nenapadá.

"To může při větším počtu podmínek nepřehledné" - chybí "být".

"Níže uvedený příklad dělá to samé" - "to samé" mi zní jako nějaký lokální výraz. Lépe "totéž".


Příklad "Číslo není dělitelné 2 ani 4" myslím není vhodný. Jestliže je číslo dělitelné čtyřmi, je dělitelné i dvěma. Tyto dvě informace ti z toho větvení vypadávají jako by platila jen jedna z nich, což ale není pravda.

"Šlo by také použít" - čistě stylistická poznámka... asi bych spíš napsal "Bylo by také možné použít", ale o nic nejde.

"Druhý podmíněný operátor je vnořený do větve při nesplnění podmínky" - ne. Je tam vnořený vždy. Přeformuloval bych: "je vnořený do větve, která se provede při nesplnění podmínky"

-----
Tam, kde píšu o vhodnosti přeformulování, můžu navrhnout nějaké alternativy, ale jsem teď trochu indisponován, tak by to bylo asi až zítra. Pokud budeš chtít, samozřejmě.
Joker
Profil
lionel messi:
Myslím si, že v tomto prípade čiarka nesúvisí s výpočtom
Zrovna v čárkách si dvakrát jistý nejsem, ale ta věta podle mě je výčet.
Podmínka obsahuje klíčové slovo, výraz a kód. - Tohle je určitě bez čárky.
Podmínka začíná klíčovým slovem, následuje výraz a kód. - Podle mě téměř stejná věta.

mimochodec [#14]:
Ty připomínky se asi vztahují k nějaké rozpracované verzi. Správná verze je ta, na kterou vede odkaz z prvního příspěvku: Základní kurz 10: Podmínky

Ale ještě k:
Příklad "Číslo není dělitelné 2 ani 4" myslím není vhodný. Jestliže je číslo dělitelné čtyřmi, je dělitelné i dvěma. Tyto dvě informace ti z toho větvení vypadávají jako by platila jen jedna z nich, což ale není pravda.

Číslo dělitelné čtyřmi je dělitelné i dvěma (na tom je ostatně založený i ten příklad), ale jsou čísla dělitelná dvěma a ne čtyřmi (6 například).
Takže „číslo není dělitelné 2 ani 4“ není nadbytečná informace.
Možná by bylo lepší to napsat obráceně, „číslo není dělitelné 4 ani 2“.
Tomáš123
Profil
lionel messi, Joker:
čiarka nesúvisí s výpočtom, ale oddeľuje vloženú vzťažnú vetu:
Vzťažná veta súvisí so vzťažným zámenom, ktorým spojka "a" nie je.

Pes, ktorý breše, nehryzie.
Príklad absolútne nesúvisiaci s otázkou

Pes, ktorý sa volal Ben, a mačka Mica piekli tortu.
Prečítaj si tú vetu bez a s čiarkou. Podľa mňa je tam nadbytočná. Význam vety sa pri odobraní čiarky nemení. (nie som znalec)

Nech sa k tomu vyjadrí jenikkozak...
mimochodec
Profil
Joker:
Ty připomínky se asi vztahují k nějaké rozpracované verzi.

hm, komentoval jsem http://php.it-joker.cz/?uri=zakladni-kurz/10-podminky :( Chyba.
lionel messi
Profil
Joker:
ale ta věta podle mě je výčet.
To je síce pravda, ale ide o vzťažnú vetu, kt. je proste vložená do výpočtu, a preto by sa mala oddeliť čiarkou, hoci ide o výpočet. Rovnako sú správne tvoje príklady, pretože nepoužívajú vzťažnú vetu (ktorý, ktorá…). Je to však len detail, podstatne dôležitejší je obsah textu, nerád by som tu rozprúdil pravopisnú debatu

Tomáš123:
Vzťažná veta súvisí so vzťažným zámenom, ktorým spojka "a" nie je.
Ale kto hovorí o spojke „a“? Smerodajné je zámeno „ktorý“. Viď: prirucka.ujc.cas.cz/?id=150&dotaz=%C4%8D%C3%A1rky#nadpis4 (pozri aj bod 6).
V bode 6 odkázanej stránky sú tieto príklady:
Bylo to v revíru, který patří známému, a všichni si to pamatují.
Říká se, že starý Loukota bojoval v Itálii, a málokdo o tom pochybuje,


Ešte raz opakujem: v zásade je to jedno, keď už sme pred vyše 20 rokmi mali pomlčkovú vojnu, netreba čiarkovú. :-)
Joker
Profil
lionel messi:
Bavíme se o větě:
„Podmínka začíná klíčovým slovem if, následuje v závorkách výraz nebo hodnota určující samotnou podmínku a pak kód, (…)“

V ní přece „následuje v závorkách výraz nebo hodnota určující samotnou podmínku“ není vložená věta, ale položka výčtu.
Podle mého názoru je to správně buď takhle, nebo by musely být čárky na obou stranách přívlastku „určující samotnou podmínku“. Bez čárek je to přívlastek těsný, s čárkami přívlastek volný.

v zásade je to jedno
Ale jestli tu někdo zná správnou variantu, ať ji napíše ;-)
lionel messi
Profil
Joker:
Bavíme se o větě:
„Podmínka začíná klíčovým slovem if, následuje v závorkách výraz nebo hodnota určující samotnou podmínku a pak kód, (…)“
WTF, ja som tiež komentoval nejakú starú verziu, asi tú istú ako mimochodec, pretože som si ju otvoril, Ctrl+F, zadať a pak a našlo mi to nejakú vzťažnú vetu, veľmi sa ospravedlňujem.
Áno, presne to isté, čo mimochodec, išlo o vetu: Podmínka začíná klíčovým slovem if, následuje v závorkách výraz nebo hodnota určující samotnou podmínku, která má být splněna a pak kód, který se provede v případě splnění podmínky.
mimochodec
Profil
Technická poznámka: mohl by Joker škrtnout ten odkaz na tu neplatnou verzi?
Joker
Profil
mimochodec:
Udělal jsem to ještě jinak: Ty rozpracované verze stejně už asi nemají žádný význam, takže php.it-joker.cz teď přesměrovává na Péhápko; Adresy těch rozpracovaných textů přesměrovávají na jim odpovídající články, jiné adresy na hlavní stránku.
Kubo2
Profil
[#4] Joker:
Mimochodem, jak jsem přišel na postřeh, že ‚Stačí ale např. zapomenout závorky kolem druhého podmíněného operátoru a kód nebude fungovat správně‘?
Možno by sa hodila výslovná zmienka o tom, ako sa v uvedenom príklade vyhodnocuje ternárny operátor. Že dva ternárne operátory majú navzájom rovnakú prioritu a teda sa vyhodnocujú za sebou tj. ($cislo == 10) ? "rovno 10" : ($cislo > 10) sa vyhodnotí najprv, a keďže $cislo == 10, prvý ternárny operátor vráti hodnotu typu string "rovno 10", ktorá sa pretypuje na boolean true a vezme sa ako hodnota výrazu podmienky pre druhý ternárny operátor.


K aktuálnemu textu:

<?php
// vloží soubor prvni.php, pokud existuje
if (is_file("prvni.php")) {
  include "prvni.php";
} else {
  echo "Nepodařilo se najít pomocný soubor pro stránku!";
}
?>

Aplikácia by sa obecne nikdy nemala spoliehať na to, že nejaký ňou vyžadovaný súbor možno neexistuje. Niečo ako test is_file() je pri bežnom vkladaní skriptov neprijateľné.


<?php
    // vložení hlavičky stránky, kterou jsme vytvořili ve 4. kapitole
    include "spolecna_hlavicka.php";

    $hodnota = empty($_GET
?>

Tento príklad je tam (zrejme nedopatrením) rozbitý.
Joker
Profil
Kubo2:
Tento príklad je tam (zrejme nedopatrením) rozbitý.
Opraveno, díky.

Aplikácia by sa obecne nikdy nemala spoliehať na to, že nejaký ňou vyžadovaný súbor možno neexistuje.
Nesouhlasím.
Podle mě platí přesný opak: Aplikace, nebo spíš programátor by vždy měl počítat s tím, že jakýkoliv soubor použitý aplikací nemusí existovat. A měl by uvažovat nad tím, co se v takovém případě stane.

Samozřejmě tam jsou sporné věci, třeba proč by uživatele mělo zajímat, že nám selhalo include, ale je to jen ukázkový příklad a tam je echo jakási náhražka za složitější kód, jen aby bylo vidět, že to něco dělá.
Kdyby to bylo například:
if (is_file("prvni.php")) {
  include "prvni.php";
} else {
  include "default.php";
}
neshledávám na tom nějaký zásadní problém.

Vaše odpověď

Mohlo by se hodit

Ostrá verze učebnice běží na www.pehapko.cz.

Prosím používejte diakritiku a interpunkci.

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

0