Slevový týden - Březen C# týden
Využij náš slevový týden a získej až 30 % bodů navíc zdarma! Zároveň také probíhá C# týden se slevou na e-learning až 80 %
Hledáme fulltime programátora do ITnetwork týmu -100% homeoffice, 100% časově flexibilní #bezdeadlinu Mám zájem!

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íjať nasledujúce firmy, ktoré možno hľadajú práve teba!

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.


 

 

Článok pre vás napísal 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 sa informačné technológie naučil na Unicorn College - prestížnej súkromnej vysokej škole IT a ekonómie.
Všetky články v sekcii
Textové řetězce - Český PHP manuál
Aktivity (1)

 

 

Komentáre

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.

Editované 29.3.2014 16:31
 
Odpovedať
29.3.2014 16:30
Avatar
Jan Koloničný:24. marca 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?

 
Odpovedať
24. marca 16:24
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovedá na Jan Koloničný
Jan Lupčík:24. marca 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>
Odpovedať
24. marca 18:22
TruckersMP vývojář
Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!
Avatar
Odpovedá na Jan Lupčík
Jan Koloničný:25. marca 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ý.

 
Odpovedať
25. marca 17:22
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovedá na Jan Koloničný
Jan Lupčík:25. marca 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.

Odpovedať
25. marca 17:56
TruckersMP vývojář
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 5 správy z 5.