Diskuze: Heredoc
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 29 zpráv z 29.
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Nebudu tu o tom s tebou diskutovat, v praxi se tohle nepoužívá a je vidět, co se stane, když to tu začneš rozebírat. Prospělo by ti, kdyby ses místo bádání v manuálech nechal zaměstnat a dělal na nějakém reálném projektu. Já chci z kluků programátory, ne teoretiky, tak to sem netahej. Snad jsem se vyjádřil jasně.
abych byl upřímný, jak tam vkládáš objekty? toString mi to nezavolalo, vždy jsem to musel dát do vedlejší proměnné.
Nevím, proč si o tom controlleru psal v kapitole o Heredoc, ale HTML do controlleru ani do modelu skutečně nepatří. Podobně do controlleru ani vieweru nepatří SQL dotazy. Vše má v MVC své místo.
Aspoň že jsem se spálil, příště si dám na tyhle věci pozor. Docela
mě to štve, že jsem se rozhodl pro Heredoc(přišlo mi to cool)
Nemohu se jen tak koukat, jak tady ostatní nutíš dělat procedurální šablony místo objektových. Nemohu ani za to, že kodéři ve firmách programují procedurálně v objektových jazycích.
Nemohu za to, že Heredoc se David Hartingervi nelíbí. Abys příště prošel, budeš muset soutěžit bez Heredoc.
Mě přijde mnohem lepší mít šablonu
<h1><?= $nadpis ?></h1>
<article><?= $obsahClanku ?></article>
<p>Autor: <?= $autor ?></p>
Než mít HEREDOC, kouknu do šablony a vidím kam co se vypíše. IMHO frontend-developer to bude mít také jednodušší. Řekne se mu že do této šablony mu přijdou tyto data. Je pak na něm jak je umístí
Za metody se omlouvám, já to skoro celé udělal naráz, takže tam je hodně chyb celkově. Mohl bych to ještě upravit, opravit, vylepšit a potom zveřejnit dohromady soutěžní i konečný výsledek dohromady zazipovaný?
HEREDOC tam na pár místech mám k výpisu tabulek, u kterých není jasná délka. Čím by se to mělo nahradit?
Až teraz som si našiel na nete čo to vlastne heredoc je a ak som to
správne pochopil, ide len o výpis textu (dúfam, že sa nemýlim). Ak je to
tak, tiež si myslým, že jeho použitie je veľmi obmädzené.
Uvediem príklad:
Mám v databáze v tabuľke riadok, v ktorom je jedna položka obrázok.png, ako
by v takom prípade heredoc fungoval?
Ak nemám pravdu, vopred sa ospravedlňujem.
Fungoval by, ale mě to formátování přijde obtížné a šablona se hůř udržuje
Mám v databázové tabulce řádek, ve kterém je položka
obrazok.png. To asi ne, do databázové tabulky se obrázky neukládají.
Ukládají se tam pouze odkazy.
a jinak heredoc by fungoval takhle:
echo <<<EOT
<table>
<tr>
<th>id_obrazku</th><th>obrázek</th>
</tr>
foreach($odbrazky as $obrazek){
<tr>
<td>$obrazek['id']</td>
<td><img <img src=$brazek['url'] title=$obrazek['name']></td>
</tr>
}
</table>
EOT;
Pokud jsem tě teda správně pochopil.
Do Heredoc nelze psát jazykové konstrukce. Musel bys ten foreach hodit mimo a text postupně ukládat do nějaké proměnné, kterou bys pak v Heredoc vypsal.
Myslím, že by to nešlo ani s pomocí složených závorek, pomocí kterých lze vypsat např. hodnotu pole.
Tak né no. Měl jsem za to, že to funguje.
To se mi pak líbí např. u systému Latte, tam lze pomocí maker (psaných pomocí složených závorek) použít i cykly, podmínky apod.
Takže doporučuješ heredoc vůbec nepoužívat? Napadá mě příklad: Mám stránku, na které je n článků, ve kterých jsou naprosto stejné elementy. Jak to udělat jednodušeji bez heredoc? já osobně bych to udělal asi takto:
for (...){
$name = $clanekData[i]->name;
$imgSrc= $clanekData[i]->imgSrc;
$text= $clanekData[i]->text;
...
$clanek[] = <<<EOT
<article>
<h2>$name</h2>
<img src="$imgSrc" ...>
<p>$text</p>
...
</article>
EOT;
$clanky=implode($clanek);
}
a pak v šabloně měl jen
...
<section>
<?= $clanky ?>
</section>
...
Kde je chyba a jak to udělat lépe?
Zápis Heredoc ve tvém případě vypadá takto:
<h1>$nadpis</h1>
<article>$obsahClanku</article>
<p>Autor: $autor</p>
Po lehké úpravě by to mohlo vypadat třeba takto:
$seznamClanku = array();
foreach ($clanekData as $clanek) {
$name = htmlspecialchars($clanek->name);
$imgSrc = urlencode($clanek->imgSrc);
$text = nl2br(htmlspecialchars($clanek->text));
...
$seznamClanku[] = <<<EOT
<article>
<h2>$name</h2>
<img src="$imgSrc" ...>
<p>$text</p>
...
</article>
EOT;
}
$clanky=implode('', $seznamClanku);
nebo třeba takhle:
$seznamClanku = array();
foreach ($clanekData as $clanek) {
$seznamClanku[] = <<<EOT
<article>
<h2>$clanek->htmlName</h2>
<img src="$clanek->urlImg" ...>
<p>$clanek->htmlText</p>
...
</article>
EOT;
}
$clanky=implode('', $seznamClanku);
Samozřejmě po doplnění nezbytných property do objektu $clanek.
nech sa na to pozeram ako dlho chcem ... mne ten Heredoce pride ako absolutna blbost .. nehnevaj sa Kit ale zapis tymto sposobom je zdhlavy, neprehladny a ako bolo povedane front end developer by sa v tom stratil.
Povec mi pekne este raz v com je to lepsie ako napriklad Smarty, ktory je maximalne prehladny ?
Přikláním se k tvému názoru.
Ve svém e-shopu jsem pro šablony použil Smarty, neumím si to představit s
Herodecem.
Ps.: Nezvrhla se ta diskuse už trošku?
Chyba je v tom, že HTML má být v šabloně a ne v logice. Heredoc se nepoužívá, už jsem to psal, Kit ho našel při svých čteních manuálů a myslí si, že je to cool. Je naprostý nesmysl na tom stavět šablony. Diskuzi zavírám.
Přesunul jsem diskuzi o Heredoc do samostatného vlákna, aby nepřekážela v diskuzi o soutěži.
Heredoc se hodí i při psaní delších SQL dotazů. Nedovedu si představit, že bych u nich použil Smarty.
Takže naposledy. Nikoho nezajímá co děláš na svém projektu na 10 řádek ve VIMu, učíme tady jak to dělá zbytek světa. Pokud chceš na tomto fóru dále působit, přestaneš sem tahat tyto nesmysly, které praxi neviděli ani z vlaku nebo budeš muset jinam.
Myslel jsem si, že mi v diskuzi o Heredoc alespoň dovolíš odpovědět na dotazy těch, které Heredoc zajímá. Projekty na 10 řádek dělám rád, protože občas dokáží totéž, co projekty jiných programátorů na 2000 řádek. Využívám to, co mi PHP nabízí a co jiné jazyky nemají. Přece v PHP nebudu programovat stejným stylem jak v C# nebo Javě. To bych musel být blázen.
Jak ale pomocí Heredoc bude schopný pracovat kodér ? V reálných projektech udělá back-end developer funkcionalitu a kodér udělá šablony.
David Hartinger má pravdu v tom, že kodérů schopných pracovat ve Smarty nebo v Latte je mnohem víc, než kodérů schopných pracovat v Heredoc.
Na větší projekty používám SAX, DOM nebo šablonovací systém. Záleží na typu projektu. Výhodou je, že se dají psát objektově. Píši je jako plnohodnotné viewery zcela nezávislé na controllerech. Zpravidla si vystačím s jedinou šablonou na celý projekt.
Nevýhodou je, že kodéři Heredoc, SAX, DOM ani šablony většinou neznají. Bylo by dobré, kdyby se to konečně naučili.
Zobrazeno 29 zpráv z 29.