PHP - 11. díl – psaní řetězců pod lupou

Dnešní díl PHP bude věnován detailnějšímu pojednání o textových řetězcích.

Do této chvíle jsem všechny textové řetězce uzavíral do dvojitých uvozovek, například "Ahoj". Ovšem to není v PHP jediná možnost. Proto v následujících kapitolách proberu další možnosti. Možnosti zápisu budou rozebrány i z hlediska jejich dalších možností.

V zásadě jsou tři možné způsoby, jak psát textové řetězce. První možnost je uzavřít řetězec do apostrofů, jako například: `Jak se máš?`. Druhá možnost je uzavřít řetězec do uvozovek, jak jsme to zatím psali všude, například "Jak se máš?". A třetí možnost nazývaná v dokumentaci heredoc syntaxe je trochu komplikovanější, povíme si o ní na konci.

Řetězce uzavřené v apostrofech

Řetězce uzavřené v apostrofech jsou nejjednodušší možné řetězce. Jak poznáte porovnáním dále, jsou řetězce uzavřené v apostrofech ty nejjednodušší, které toho tolik neumějí. Jejich výhodou je, že jsou to prostě řetězce ve své nejčistější podobě. A pokud nebudete chtít různé ty serepetičky, které, jak poznáte později, jsou navěšeny na řetězcích uzavřených uvozovkách, budete dávat přednost řetězcům v apostrofech.

Protože řetězce v apostrofech jsou ty nejjednodušší, a PHP k nim nic dalšího nepřidává, měly by teoreticky být i mírně rychlejší při zpracování, než další způsoby zápisů řetězců. Používejte proto uvozovky uzavřené v apostrofech přednostně před dalšími způsoby.

Pokud byste chtěli napsat jako součást řetězce uzavřeného v apostrofech přímo znak apostrof, je to také možné. Prostě namísto jednoho znaku apostrof napíšete dovnitř dva znaky \`, tedy zpětné lomítko a pak samotný apostrof. Viz následující jednoduchý příklad:

<html>
<head>
<title>Příklad 1. z 11. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
  echo `Takhle se vypisuje apostrof: \`.`;
?>
</body>
</html>

Jak je vidět, i apostrof se dá vypsat. Ještě speciální způsob má samotný znak zpětné lomítko \. Pokud chcete napsat zpětné lomítko, je dobré ho zdvojit. Tedy napíšete-li dvakrát za sebou zpětné lomítko takto: \\, ve skutečnosti jste vložili jen jedno:

<html>
<head>
<title>Příklad 2. z 11. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
  echo `Tohle je jedno zpětné lomítko: \\.`;
  echo `Tohle jsou dvě zpětná lomítka: \\\\.`;
?>
</body>
</html>

Těmto dvojicím znaků, které začínají zpětným lomítkem \ se říká escape sekvence.

Nic jiného se s řetězcem uzavřeným v apostrofech neděje. Pokud tedy nemáte s textovým řetězcem další záměry, dejte mu přednost.

Řetězce uzavřené v uvozovkách - expanze proměnných

Řetězce, které jsou uzavřené v uvozovkách jsou daleko prošpikovanější nejrůznější přidanou hodnotou. To na jedné straně může být velmi příjemné, na druhé straně v některých případech bude těžké ohlídat všechny možnosti.

Základním rozšířením jsou tzv. expanze proměnných. Pokud dovnitř řetězce napíšeme název proměnné začínající dolarem, pak se dovnitř řetězce vloží hodnota proměnné. Viz třeba tento malý příklad:

<html>
<head>
<title>Příklad 3. z 11. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
  $jmeno = "Pavel";
  $napoj = "pivo";
  echo "$jmeno je dobrý kamarád!<br>";
  echo "$jmeno pije $napoj.<br>";
?>
</body>
</html>

Pokud si příklad vyzkoušíte, zjistíte, že namísto řádky

echo "$jmeno je dobrý kamarád!<br>";

bude vypsáno "Pavel je dobrý kamarád!", protože PHP si za $jmeno dosadil proměnnou $jmeno, která má hodnotu "Pavel". Obdobně:

echo "$jmeno pije $napoj.<br>";

se vypíše jako "Pavel pije pivo.", protože zde dojde k expanzi dvou proměnných, a to proměnné $jmeno, která má hodnotu "Pavel" a proměnné $napoj, která má hodnotu "pivo".

Expanze proměnných je celkem užitečná věc v mnoha případech, je třeba počítat s tím, že PHP se snaží vytvořit co nejdelší jméno proměnné, kterou nahrazuje. Takže třeba následující příklad selže:

<html>
<head>
<title>Příklad 4. z 11. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
  $napoj = "šaratice";
  echo "Pavel pije $napoje.<br>";
?>
</body>
</html>

V tomto příkladu mám proměnnou $napoj, ale v řetězci se hledá proměnná $napoje. Výsledkem je, že proměnnou $napoje nenajde. Což v některých případech může skončit i anglickým hlášením o chybějící proměnné. Každopádně jsme Pavla od šaratice zachránili. A jak to má vypadat správně, aby se doplnila proměnná $napoj? Takto (máte hned dvě možnosti, jak to napravit):

<html>
<head>
<title>Příklad 5. z 11. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
  $napoj = "šaratice";
  echo "Pavel pije {$napoj}e.<br>";
  echo "Pavel pije ${napoj}e.<br>";
?>
</body>
</html>

Jak je vidět ve výše uvedeném příkladu, je v takovém případě potřeba do složených závorek { a } oddělit tu část jména proměnné, která je platná. Dolar, který předchází jménu proměnné můžeme napsat dovnitř složené závorky, a nebo před ní, jak chcete. Vyjde vám jen neobvyklý řetězec "Pavel pije šaraticee", což je v češtině špatně, ale berte to jako příklad na funkčnost.

Složené závorky { a } se dají použít i tehdy, pokud chci vypsat proměnnou, která je součástí pole jako třeba v následujícím příkladu, který využije předdefinovanou proměnnou. Příklad vypíše informace o Vašem prohlížeči:

<html>
<head>
<title>Příklad 6. z 11. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
  echo "Informace o prohlížeči: {$_SERVER[`HTTP_USER_AGENT`]}.";
?>
</body>
</html>

Řetězce uzavřené v uvozovkách - escape sekvence

Protože se tvůrci PHP snažili, aby pomocí řetězců uzavřených v uvozovkách šly napsat opravdu všechny znaky, vytvořily se tzv. escape sekvence. Což jsou sekvence znaků, které začínají znakem zpětné lomítko \, a které nám umožňují zapsat opravdu všechny znaky. Pro zapsání zpětného lomítka napíšeme dvě zpětná lomítka za sebou \\. Pro zapsání samotných uvozovek napíšeme \", pro zapsání dolaru napíšeme \$. Řetězce v dvojitých uvozovkách umí také \n pro znak nového řádku (LF), \r pro návrat vozíku (CR) a \t pro tabelátor:

<html>
<head>
<title>Příklad 7. z 11. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
  echo "Toto jsou uvozovky \".<br>";
  echo "Toto je zpětné lomítko \\.<br>";
  echo "A toto je znak dolar \$.<br>";
?>
</body>
</html>

Užitečné také je zapsání znaku v hexadecimální notaci. Zapíše se tak, že napíšu dvojici znaků \x a pokračuji jedním, nebo dvěma hexadecimálními číslicemi. Pokud nechápete, co je to hexadecimální notace, tak tento odstavec přeskočte. Například mezeru můžu napsat jako \x20 v hexadecimální notaci.

Heredoc syntaxe

Heredoc syntaxe je užitečná u skutečně dlouhých řetězců. Rovnou uvedu jeden příklad:

<html>
<head>
<title>Příklad 8. z 11. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
echo <<<QQQ
Nějaký dlouhý text, který potřebujete napsat jako jeden řetězec
je možné napsat v here doc syntaxi. Uvnitř tohoto řetězce můžete
používat vše, na co jste zvyklí z řetězců uzavřených v uvozovkách,
tedy i expanzi proměnných a escape sekvence.
QQQ;
?>
</body>
</html>

Heredoc syntaxe začíná <<< a za ním nějakým textem. V našem případě jsem zvolil QQQ, důležité je, že stejným textem QQQ řetězec i skončí. Můžete samozřejmě použít cokoli jiného namísto QQQ, důležité je, aby se ten text nevyskytoval uvnitř řetězce. Mezitím je dlouhý text, který je rozdělený na několik řádek.

Samotná heredoc syntaxe má všechny možnosti, které má řetězec uzavřený v uvozovkách, tedy i expanzi proměnných a také escape sekvence.

Závěr: Kdy používat který zápis?

Pokud bych měl shrnout, kdy doporučuji který zápis, napsal bych to asi takto. Pokud nečekám expanzi proměnných a nepotřebuji některé speciální znaky, uzavírám řetězce do apostrofů. Z hlediska HTML a XHTML značkách jsou řetězce zapsané v apostrofech i jednodušší a čitelnější.

Pokud potřebuji expanzi proměnných, uzavírám znaky do uvozovek.

Co se týká heredoc syntaxe, tu používám u skutečně dlouhých řetězců.

Diskuze (23) Další článek: Další mail nabízející 1 GB prostoru

Témata článku: Windows, Software, Programování, PHP, Psaní, Znak, Následující řádek, Escape, Expanze, Díl, Stejný text, Syntax, Textový řetězec, Dobrý způsob, Body, HTML, Echo, Escape sekvence, Malý příklad, Lupo, Řetěz, Speciální díl, Apostrof, Head, Kamarád, Software na Heureka.cz



Z Androidů se jednoduše stane webkamera. Nebudete k tomu potřebovat žádnou aplikací navíc

Z Androidů se jednoduše stane webkamera. Nebudete k tomu potřebovat žádnou aplikací navíc

** Google v Androidu 14 přidá funkci, se kterou přišel jako první Apple ** Androidy využijete jako webkameru k počítači ** Nebudete k tomu potřebovat žádnou externí aplikaci navíc

Martin Chroust
Android 14Záznamová kamera
Bude to o prsa. Facebook a Instagram pořád neví, kdy jsou zobrazené bradavky porno

Bude to o prsa. Facebook a Instagram pořád neví, kdy jsou zobrazené bradavky porno

**Meta má zjednodušit pravidla a být ke všem spravedlivá **Facebook s Instagram věnují samostatný odstavec bradavkám **Pravidla ale neřeší nebinární, transsexuální a intersexuální osoby

Petr Urban
InstagramFacebookSociální sítě
Spousta řidičů v Česku riskuje pokutu kvůli umístění držáku mobilního telefonu. Zákon hovoří jasně

Spousta řidičů v Česku riskuje pokutu kvůli umístění držáku mobilního telefonu. Zákon hovoří jasně

** Kam s telefonem v autě, které nemá palubní počítač? ** Variant držáků je celá řada, ale každý má svá specifika ** Není možné jej umístit, kam se vám zlíbí

AutoRevue.cz
LegislativaPro řidičePříslušenství
Google není jen vyhledávač: 15 užitečných funkcí, o kterých možná ani nevíte

Google není jen vyhledávač: 15 užitečných funkcí, o kterých možná ani nevíte

** Google umí kromě vyhledávání i spoustu dalších věcí ** Vybrali jsme více než 15 užitečných funkcí a schopností ** Stačí zadat do vyhledávače ta správná klíčová slova

Karel Kilián
TipyVyhledávačeGoogle
15 praktických tipů a triků pro Mapy.cz, které možná neznáte

15 praktických tipů a triků pro Mapy.cz, které možná neznáte

** Mapy.cz neslouží jen k zobrazení podkladů a plánování tras ** Nabízejí celou řadu dalších praktických funkcí a možností ** Vybrali jsme 15 tipů a triků, o kterých možná nevíte

Karel Kilián
Mapy.czMapyTipy
Za WhatsApp se bude platit! Za předplatné dostanete funkci, která je u konkurence zadarmo

Za WhatsApp se bude platit! Za předplatné dostanete funkci, která je u konkurence zadarmo

** Bylo to jen otázkou času ** Už i WhatsApp nabízí prémiové předplatné ** Za poplatek dostanete funkci, která je u konkurence zadarmo

Martin Chroust
předplatnéWhatsAppMobilní aplikace
Návod, jak dostat maximum z Peněženky Google

Návod, jak dostat maximum z Peněženky Google

Služba Google Wallet (Peněženka Google) schlamstla před několika měsíci platební aplikaci Google Pay. Díky tomu se původní platforma rozrostla o další funkce. Je zde však i prostor pro zlepšení.

Jan Spěšný
Humor za každou cenu se nevyplácí. Komentáře OnePlus k premiéře řady Galaxy S23 budí spíše rozpaky

Humor za každou cenu se nevyplácí. Komentáře OnePlus k premiéře řady Galaxy S23 budí spíše rozpaky

** Když Apple představuje novinky, Samsung je rád komentuje ** Nyní si to stejné vyzkoušelo OnePlus ** Výsledné vtipné hlášky na Twitteru však budí spíše rozpaky

Martin Chroust
Unpacked
18 tipů a triků pro WhatsApp, které možná neznáte

18 tipů a triků pro WhatsApp, které možná neznáte

** WhatsApp je jedna z nejrozšířenějších komunikačních aplikací ** Obsahuje mnoho skrytých funkcí, které vylepší používání ** Zde najdete tipy na ty nejužitečnější

Adam Kos
WhatsAppTipy a triky