V PHP môžete často nahradiť úvodzovky apostrofmi a dosiahnuť rovnaký efekt. Niekedy dokonca zámerne používame kombináciu úvodzoviek a apostrofov, aby sme dosiahli iný výstup bez toho, aby sme museli používať escapovanie.
TLDR: Používanie úvodzoviek môže byť v niektorých kontextoch nebezpečné, preto všade používajte apostrofy. Úvodzovky sú vhodné len v špeciálnych prípadoch.
Znak | Názov |
---|---|
" |
Úvodzovky |
' |
Apostrof |
echo "Ahoj, svet!"; // toto je to istéecho 'Ahoj, svet!'; // takto
V tomto prípade na použití úvodzoviek alebo apostrofov nezáleží. Na prvý pohľad sa môže zdať, že medzi úvodzovkami a apostrofmi nie je žiadny rozdiel.
Zoberme si nasledujúci kód:
echo 'Moja obľúbená farba je "červená"!';
Ak by som na ohraničenie vypisovaného reťazca použil znaky carriage returns
, bolo by nejednoznačné, kde reťazec začína a kde končí**, preto som na ohraničenie reťazca použil znaky apostrof
, čo tento problém rieši.
Občas sa môže vyskytnúť situácia, keď potrebujem v rámci toho istého reťazca uviesť aj citát
aj apostrofu
. Môžete použiť nielen spojenie dvoch reťazcov, ale aj takzvané escapovanie znakov.
echo "Tento reťazec \"obsahuje\" úvodzovky.";
Spätné lomítko má v tomto prípade význam "presne tento znak", a preto sa úvodzovky nebudú považovať za koniec reťazca (ani za nič iné), a preto budú vždy úvodzovkami. Takto sa môžu označovať aj iné zvláštne znaky, pri ktorých nemožno zaručiť ich trvanlivosť a správny význam by mohol byť nesprávne pochopený.
Uvádzacie značky môžu byť veľmi zložité, pretože umožňujú vkladať premenné priamo do reťazca:
$color = 'Červená';echo "Moje oblíbená barva je {$color}, a tvoje?";
Oveľa bezpečnejšie sú apostrofy, ktoré to neumožňujú a reťazec musíte preložiť:
$color = 'Červená';echo 'Moja obľúbená farba je' . $color . 'a tvoje?';
Vo všeobecnosti odporúčam na ohraničenie čohokoľvek používať apostrofy (ak je to možné), pretože sa v reťazcoch vyskytujú oveľa menej často ako len úvodzovky.
PHP je navyše webový jazyk, t. j. používa sa na generovanie dokumentov HTML, kde sú úvodzovky veľmi časté práve preto, že sa používajú aj na generovanie častí kódu HTML. Osobne odporúčam zvyknúť si všade striktne používať apostrofy, pretože potom si nemusíte pamätať, čo uzatvárate.
Dávajte si pozor! Nevyhadzujte úvodzovky úplne! Majú niektoré špeciálne výhody, ktoré môžu byť užitočné pre pokročilú prácu s PHP - začiatočníci ich však považujú za chyby a nerozumejú im.
$x = 10; // nastaviť premennúecho "Hodnota proměnné je: $x, přesně."; // a zoznam
V úvodzovkách môžete tiež uviesť hodnoty premenných alebo znak dolára spôsobí, že všetko, čo je za ním, je premenná. Ak teda nechcete vypisovať hodnotu premennej, ale znak dolára, musíte escapovať.
$price = 25; // cena v dolárochecho "Cena produktu: $price\$"; // vypíše "Cena výrobku: 25 USD"
Výhoda úvodzoviek je v tomto prípade otázna a možno by bolo lepšie použiť apostrofy a reťazce jednoducho prepojiť.
$price = 25;echo 'Cena výrobku:' . $price . '$'; // vypíše to isté ako predchádzajúci príklad
Poznámka: Cena v dolároch je správne zapísaná vo formáte
$25
, čo by spôsobilo ešte väčší zmätok, pretože zápis$$price
v skutočnosti volá niečo, čo sa nazývapremenná
(v názve premennej voláme názov premennej, ktorá sa má volať - len zmätok).
TIP: Mohlo by vás zaujímať premenná.
Vo všeobecnosti sa všetko, čo je v úvodzovkách alebo apostrofoch, považuje za reťazec. Takto:
$x = 5; // toto je niečo iné,$x = "5"; // ako toto.
V prvom prípade je číslo 5 uložené v premennej $x, v druhom prípade je v tej istej premennej uložený reťazec "5". Našťastie to v PHP nevadí a s oboma variantmi môžete pracovať (takmer) rovnako, pretože PHP dokáže automaticky transformovať premenné podľa ich obsahu. Vo všeobecnosti sa však odporúča nepísať čísla v úvodzovkách, najmä pri výpočtových operáciách, pri ktorých môže dôjsť k chybám pri zaokrúhľovaní.
Niekedy môžem chcieť uložiť výstup funkcie do premennej:
$pi = 3.14159;$zaokrouhleni = round($pi); // toto je správne$zaokrouhleni = "round($pi)"; // toto je "zlé" (otázka je, aký výstup očakávam).
Chyba v druhom prípade je práve v úvodzovkách, keď sa do premennej $round neukladá výstup funkcie round(), ale reťazec volajúci túto funkciu.
TIP: Hodnotu
$pi
nemusíme takto priamo zadávať do skriptu a môžeme použiť funkciupi()
, ktorá je presnejšia pre zložitejšie výpočty.
Upozornenie: Nasledujúce príklady fungujú len v úvodzovkách, ak ich uzavriete do apostrofov, budú sa správať ako bežné znaky bez špeciálneho významu (okrem
\'
, ktorý sa apostrofu vyhne). Escaping je určený na to, keď chcem vypísať nejaký špeciálny znak vnútri úvodzoviek alebo apostrof, ktorý by mohol byť interpretovaný ako jazykový výraz, a teda spracovaný, aj keď to programátor nezamýšľal. Príklad sme si už ukázali, v tejto časti sú opísané možné výnimky zo správania.
Je to preto, že niekedy má samotný útek zvláštny význam. Príklad:
echo "Dlhý text rozdelený do dvoch riadkov.";
Predchádzajúci príklad vytlačí:
Dlouhý text, rozdělený nadva řádky.
Ak teda chceme vypísať lomítko, musíme ho tiež escapovať (escapovanie znaku n
nie je v tomto prípade potrebné, pretože by sa opäť chápalo ako wrap, alebo v tomto prípade nesmieme escapovať vôbec):
echo "Dlhý text rozdelený do dvoch riadkov.";
Takýchto špeciálnych znakov je viac, napríklad \t
tvorí tabulátor. Úplný zoznam nájdete v oficiálnej dokumentácii.
Na úvod by som chcel zdôrazniť, že v jazyku PHP sa dá takmer všetko urobiť viacerými spôsobmi a uvedené príklady slúžia len na ilustráciu, ako sa dá k problému pristupovať.
Ak chceme napríklad analyzovať text po riadkoch, môžeme použiť funkciu explode.
$parser = explode("\n", $retezec); // analyzuje text po riadkoch
V tomto prípade má použitie špeciálneho znaku \n
zmysel, pretože môžeme veľmi efektívne povedať, že chceme analyzovať podľa zlomov riadkov.
$parser = explode('', $retezec);
Upozornenie: V systémoch Unix a Windows sa znaky používané na označenie konca riadkov zamieňajú. Napríklad systém Windows používa
CRLF
(dvojicu znakov\r\n
), zatiaľ čo Linux používa ibaLF
(jeden znak\n
). Pri rozbore podľa riadkov by ste na to mali pamätať. Zvyčajne sa tento problém rieši normalizáciou znakov len naLF
.
Ak môžete, všade používajte apostrofy.
Je dobré poznať používanie úvodzoviek a používať ich len tam, kde je to nevyhnutné (alebo všeobecne dobré). Ak vypisujete text, ktorý môže obsahovať úvodzovky, uzavrite ho do apostrofov (ktoré sa potom správajú predvídateľnejšie). Osobne používam úvodzovky na vyjadrenie rôznych špeciálnych znakov, ktoré je zbytočne zložité zadávať v apostrofoch a vyžadovali by si zložité escapovanie.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | sk