Konce řádků

Školení, která pořádám

Vzhledem k tomu, že jakákoliv posloupnost bílých znaků (mezery, tabulátory, konce řádků) se v HTML kromě speciálních případů zobrazuje jako jedna mezera, není nezbytně nutné tyto znaky při generování výstupu z PHP kódu vypisovat. Ale vzhledem k tomu, že vygenerovaný HTML kód občas potřebuji prozkoumat, zvykl jsem si ho znakem konce řádku automaticky oddělovat:

<?php
echo "1. řádek<br />\n";
?>

Dále se vyplatí vědět, že pokud za značkou ?> bezprostředně následuje konec řádku, tak bude ve výstupu oříznut. Někdy to přehlednost může spíše snížit, ale hodí se to především ve skriptu, který začíná PHP kódem a jemuž následuje HTML – HTML značky lze bez problémů umístit až na nový řádek. Podobně se chovají i některé šablonovací systémy.

V PHP kódu na koncích řádek záleží v jediném případě – u syntaxe heredoc. Matlání více příkazů na jeden řádek bych ale rozhodně nikomu nedoporučoval, protože to významně zhoršuje přehlednost kódu. Opačný případ – tedy rozdělování dlouhých příkazů – doporučuji řešit spíše jejich zkracováním (např. přiřazením mezivýsledku do proměnné a jejím následným použitím) než jejich rozdělováním do více řádek.

Pokud si mám vybrat mezi přehledností PHP zdrojáku a výsledného HTML kódu, určitě volím přehlednost PHP, protože s ním pracuji mnohem častěji. HTML výstup se ale vždy snažím formátovat alespoň částečně, aby mi neskončil na jednom řádku, jako to má třeba Seznam.

Jakub Vrána, Výuka, 2.1.2006, diskuse: 15 (nové: 0)

Diskuse

lukáš:

>> Někdy to přehlednost může spíše snížit

Myslim, ze v dokumentaci bylo (je?) dokonce napsano, ze tu tahle vlastnost je prave proto, aby vysledky kod mohl byt necitelny.

Kazdopadne, komprimovat ho je lepsi pres ob_ funkce - pak se to da i jednoduse vypnout/zapnout pro odladeni.

Jinak si vetsinou definuju konstantu NL = "\n", diky cemuz je pak jednodussi pripojovat nove radky i k retezcum zapsanym pomoci jednoduchych uvozovek.

ikona llook:

"Dále se vyplatí vědět, že pokud za značkou ?> bezprostředně následuje konec řádku, tak bude ve výstupu oříznut."

Myslím, že to je hlavně kvůli některým editorům (například Vim), které každému texťáku vnucují na konec odřádkování. Kdyby to tak nebylo, tak by každý druhý dotaz v diskuzi byl "proč headers already sent, když tam po ?> už nic nemám?".

Michal Molhanec:

No to vychází z klasického UNIXového pojetí textového souboru jako série řádek ukončených znakem nový řádek. Třeba takový céčko to má i v normě.

tiso:

Na doplnenie - o prehľadnosti formátovania kódu som kedysi napísal pár riadkov: http://tiso.blog.sk/detail-php-a-(x)html.html
Mohlo by to niekomu pomôcť...

HejTi:

Co se týče Seznamu - tam je to ořezání o všechny zbytečné znaky logické - při takové návštěvnosti je znát ve špičce každý byte. A osobně se tomu vůbec nebráním - šablony si napíšu přehledně a o výsledné html se nestarám - lepší programy pro psaní HTML či XML kódu umí "source formating," takže kód je vlastně vždy čitelný ať už někdo používá konce řádků nebo ne...

pmasarik:

Pri apostrofoch používam tento zápis, neexistuje niečo jednoduchšie?

<?php
echo '1. řádek<br />'."\n";
?>

mach:

Jde to pres:

<?php

define
('NL', "\n");

// a pak uz se muze pouzivat:

echo 'neco' . NL;

// znak $ tam byt nema

?>

neo:

Chcem sa naucit programovat v PHP. To co tu vidim mi nic moc nehovori...kde mam zacat???

WarBrain:

no tak poradim ti chod na linuxsoft.cz

Michal Hantl:

Já celý výstup cpu do proměnné a před echem ho naformátuju, tento způsob dává velkou kontrolu nad kódem a obsahem stránky.

Jan Tichý:

Jenže takhle nemůžeš dělat extrémně zatížený aplikace, protože by Ti to server nestíhal -- v takových případech jseš rád za každej byte, kterej můžeš rovnou poslat na výstup a nemusíš ho držet v (péhápéčkovské) paměti.

Michal Hantl:

Pro extrémně zatížené aplikace se to možná nehodí, ale pro zbytek určitě ano. Nějak jsem nepostřehl, že tento web je zaměřen na čtenáře, kteří vyvíjejí extrémně zatížené aplikace;).

Btw, někde jsem četl, že mockrát echo zpomaluje php skripty?

mach:

To jsem testoval a rozdil je asi radovy (jenze echo je hodne rychle, takze i radove pomalejsi funkce neni zas tak pomala).

Nemyslim, ze by byla pravda, ze se to neda pouzit v extreme zatizenych aplikacich. Takove totiz jsou vetsinou i pomerne rozsahle a tak je nutne je programovat objektove. A programovat objektove, hodne kod clenit atd. (aby byl i rozsahly projekt upravovatelny) v PHP dost zpomaluje. Tim padem se stejne prinejmensim pouzije na radu veci cache, predpocitani atd., coz posila uvahy o tom, jestli vadi ukladat si vsechno do promenne, do haje.

Mimoto hrdlo vytizene aplikace bude mnohem pravdepodobneji:
2) ze to nestiha databaze
1) v tom, ze bylo pouzito PHP, popripade ze se nejede pres zkompilovany PHP kod

ikona spaze:

"Tim padem se stejne prinejmensim pouzije na radu veci cache"

yep, nicméně, mám pocit, že uvedené výsledné formátování se provádí při každým požadavku, což je trochu na nic. Pokud je to jen jednou při změně obsahu, není problém si tam malovat, co je potřeba.

DJ.Maca:

Ja vsechen vystup XHTML hazu do pole a vysledky kod necham prejet funkci, ktera prida na konec radku \n.

Diskuse je zrušena z důvodu spamu.

avatar © 2005-2024 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í Creative Commons. 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.