ITnetwork summer 2020 Python týden
Pouze tento týden sleva až 80 % na e-learning týkající se Pythonu
80 % bodů zdarma na online výuku díky naší Letní akci!

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."
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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 Čápka
Avatar
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity (1)

 

 

Komentáře

Avatar

Člen
Avatar
:29.3.2014 16:30

Zdravím,
když mám v mateřském PHP dokumentu definovanou proměnnou (slouží jako identifikace té konkrétní stránky) a pak přes

include "http://localhost/...";

přidružený PHP soubor, který by podle té proměnné měl rozpoznat, o kterou konkrétní stránku se jedná a vypsat obsah do té původní, jak předám tu proměnnou z původního PHP do toho přidruženého?
Díky.

Editováno 29.3.2014 16:31
 
Odpovědět
29.3.2014 16:30
Avatar
Jan Koloničný:24. března 16:24

Ahoj,
Proč se mi u tohoto kódu:

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        $cislo1 = $_GET["cislo1"];
        $cislo2 = $_GET["cislo2"];
        echo("Řešení lineární rovnice\n");
        echo("$cislo1 x + $cislo2 = 0");
        ?>
    </body>
</html>

Nedá ten druhý výpis na nový řádek?

 
Odpovědět
24. března 16:24
Avatar
Jan Lupčík
Super redaktor
Avatar
Odpovídá na Jan Koloničný
Jan Lupčík:24. března 18:22

Ahoj, dané texty vypisuješ do HTML stránky a v HTML nemá nový řádek žádnou váhu. Pokud chceš odřádkovat text (v paragrafu), musíš namísto "\n" použít HTML tag pro nový řádek; <br />. Tvůj kód bude ve výsledku vypadat následovně:

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        $cislo1 = $_GET["cislo1"];
        $cislo2 = $_GET["cislo2"];
        echo 'Řešení lineární rovnice<br />';
        echo "$cislo1 x + $cislo2 = 0";
        ?>
    </body>
</html>
Odpovědět
24. března 18:22
TruckersMP vývojář
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Jan Lupčík
Jan Koloničný:25. března 17:22

Děkuji moc za odpověď :)!
Vždyť to píšu do <?php, to neznamená, že to píšu v PHP? Když i můj soubor, který založím je PHP webpage a má příponu .php? Jsem v tom asi nějak ztracený.

 
Odpovědět
25. března 17:22
Avatar
Jan Lupčík
Super redaktor
Avatar
Odpovídá na Jan Koloničný
Jan Lupčík:25. března 17:56

Ano, jedná se o PHP kód. Avšak výsledek se vypisuje do HTML stránky - to je to, co se zobrazuje uživateli. Nový řádek zapsaný stylem "\n" by fungoval pouze při výpisu do konzole nebo při zápisu do souboru.

Odpovědět
25. března 17:56
TruckersMP vývojář
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.