IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Textové řetězce - Český PHP manuál

V následujícím PHP tutoriálu si ukážeme, jak v PHP pracovat s textovými řetězci (stringy) a jak řetězce vypisovat. Textový řetězec se v PHP zapisuje buď do uvozovek nebo do apostrofů.

Textové řetězce pomocí apostrofů

Vytvořme si proměnnou s textovým řetězcem pomocí apostrofů ('):

<?php
$text = 'Černé díry jsou tam, kde bůh dělil nulou.';

Obsah proměnné $text:

"Černé díry jsou tam, kde bůh dělil nulou."

(Uvozovky u obsahu jsou jen ilustrativní, ve skutečnosti tam nejsou).

Proměnnou můžeme stejně dobře vytvořit i na více řádků, zalomení se v textu poté opravdu projeví:

<?php
$text = 'Černé díry jsou tam,
kde bůh dělil nulou.';

Obsah proměnné $text:

"Černé díry jsou tam,
kde bůh dělil nulou."

Pokud potřebujeme zapsat samotný apostrof, musíme ho odescapovat. Toho docílíme tím, že před něj napíšeme zpětné lomítko. Bez toho by PHP apostrof bralo jako ukončení řetězce.

Příklad:

<?php
$text = 'Znak \' musíme odescapovat';

Obsah proměnné $text:

"Znak ' musíme odescapovat"

Pokud budeme potřebovat v textu samotné zpětné lomítko, musíme ho také odescapovat, aby si PHP nemyslelo, že označujeme escapování. Vložíme ho do textu jako \\.

Textové řetězce pomocí uvozovek

S uvozovkovou variantou zadávání řetězců můžeme dělat to samé, co s apostrofovou. Pomocí uvozovek však můžeme do řetězce zapisovat speciální znaky a vkládat proměnné. Daní za to je o něco nižší rychlost.

Vkládání speciálních znaků

Uvozovky nám umožňují zapisovat speciální znaky, jako jsou např. \n pro nový řádek nebo \t pro tabulátor.

<?php
$text = "Černé díry jsou tam,\n kde bůh dělil nulou.";

Obsah proměnné $text:

"Černé díry jsou tam,
kde bůh dělil nulou."

Speciální znaky se označují zpětným lomenem a v apostrofové verzi nebudou fungovat. Přes escapování vyřešíme také vložení uvozovky \", dolaru \$ a samotného zpětného lomítka \\.

Vkládání proměnných

Do uvozovkového stringu můžeme vložit i obsah proměnných. A to i takto jednoduše:

<?php
$vek = 20;
$text = "Je mi $vek let.";

Obsah proměnné $text:

"Je mi 20 let."

Pokud je proměnná složitější (např. pole s klíčem jako řetězec), vložíme ji do složených závorek:

<?php
$veky = array('muj' => '20');
$text = "Je mi ${veky['muj']} let.";
// stejně tak funguje i varianta
$text = "Je mi {$veky['muj']} let.";

Obsah proměnné $text:

"Je mi 20 let."

Tyto speciální funkce uvozovek samozřejmě fungují jen v tu chvíli, když řetězec zadáváme ručně do kódu. Pokud speciální znaky zadá uživatel nebo se tam dostanou z jiné proměnné, nebudou fungovat:

<?php
$s = '#{abc} \n \t';
$text = "$s";

Obsah proměnné $text:

"#{abc} \n \t"

Mixování variant

Ačkoli by se to ve správně navržené aplikaci stávat nemělo, občas můžeme potřebovat do textového řetězce vložit HTML kód nebo JavaScript. Escapovat všechny uvozovky by bylo určitě nepříjemné. Využijeme tedy toho, že do apostrofové varianty můžeme uvozovky bez problému vkládat:

<?php
$html = '<table border="0">
<tr>
<td style="color: red;">Buňka</td>
</tr>
</table>';

Naopak při výpisu JavaScriptu budeme více potřebovat apostrofy:

<?php
$js = "alert('JavaScript!');";

Pokud víme, že nebudeme potřebovat speciální funkcionalitu uvozovek, můžeme použít apostrofy. Zvykl jsem si je používat zejména u klíčů polí o podobných věcí.

Konkatenace (slučování) řetězců

Více řetězců můžeme sloučit do jednoho. Překvapivě k tomu neslouží operátor +, ale . (tečka). Plus slouží ke sčítání číselných hodnot, to si ukážeme za chvíli.

Slučme 2 řetězce do jednoho:

<?php
$text = 'Udělal bych svět lepší' . ', ale nechtějí mi dát zdroják.';

Obsah proměnné $text:

"Udělal bych svět lepší, ale nechtějí mi dát zdroják."

Stejného výsledku bychom dosáhli i takto pomocí operátoru .= :

<?php
$text = 'Udělal bych svět lepší';
$text .= ', ale nechtějí mi dát zdroják.';

Slučovat můžeme samozřejmě stringy zapsané různými variantami zápisu a také proměnné:

<?php
$s = 'sloučený';
$text = "Toto je " . $s . ' text.';

Konkatenace je vlastně také alternativa k vkládání proměnných do řetězce, je na vás, jaký způsob vám více vyhovuje.

Konkatenace můžeme využít pro zadávání nových řádků tak, aby byly nezávislé na systému (Windows, Mac i Linux používají k označení nového řádku odlišné znaky). Konec řádku vyvoláme vložením konstanty PHP_EOL:

<?php
$text = 'Černé díry jsou tam,' . PHP_EOL . 'kde bůh dělil nulou.';

Slučování řetězce a čísla

Slučovat můžeme i řetězec a číslo. Sloučení pomocí tečkového operátoru (tedy konkatenace) je jednoznačné, číslo se jednoduše vloží do řetězce:

<?php
$vek = 20;
$text = 'Je mi ' . $vek . ' let.';

Obsah proměnné $text:

"Je mi 20 let."

Zajímavější to však začne být, když se řetězec a číslo pokusíme sečíst pomocí operátoru + (plus). Protože PHP je velmi dynamicky typované, není problém sečíst číslo, které je zadáno jako text:

<?php
$vysledek = 13 + '5';

Obsah proměnné $vysledek:

18

Pokud by jedno z čísel bylo desetinné, je i výsledek desetinný. Doposud by vše bylo ještě očekávatelné. Pojďme ale sečíst číslo a nesmyslný text:

<?php
$vysledek = 13 + 'Kobra 11';

Obsah proměnné $vysledek:

13

Výsledek je 13 a výpočet nevyvolal žádnou výjimku, to může být někdy dost nepříjemné. Ukažme si další příklad:

<?php
$vysledek = 13 + '5 Ahoj, jak se máš?';

Obsah proměnné $vysledek:

18

Při tomto výsledku si leckdo klepe na čelo, bohužel i takové je PHP a stejně je to nejpoužívanější webový jazyk :) To by bylo pro práci s řetězci vše.


 

Všechny články v sekci
Textové řetězce - Český PHP manuál
Článek pro vás napsal David Hartinger
Avatar
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity