Reťazce

Porovnanie :: Perl | Python

Reťazce môžu byť ohraničené dvoma druhmi oddeľovačov.
Ak je reťazec ohraničený úvodzovkami ("), premenné v jeho tele sú spracovávané.
Druhou možnosťou je uzavrieť reťazec do apostrofov ('). Tento reťazec nebude vo vnútri parsovaný, špeciálne znaky nie je možné použiť - budú zobrazené tak, ako sú.

Únikové sekvencie

Sekvencia Význam
\" Úvodzovky v texte.
\' Apostrof v texte.
\\ Spätné lomítko texte.
\$ Znak $ v texte
\n Ukončenie riadku (new line).
\r Návrat vozíka (carriage return) - tiež znak pre nový riadok, podobne ako \n.
\t Tabulátor.
\nnn Číslo v osmičkovej sústave (n sú číslice 0-7)
\xHH Číslo v šestnástkovej sústave (H je číslo 0-9 alebo A-F)

Pre ukončenie riadku sú k dispozícii dve rôzne sekvencie, \r a \n. \r odpovedá ASCII kódu 13 (znak označovaný ako CR), \n ASCII kódu 10 (LF). Na linuxových systémoch sa používa samotný znak \n a na počítačoch Macintosh \r, operačný systém Windows pre ukončenie riadku používa dva znaky v poradí \r\n.

Príklad: HTML kód vygenerovaný v PHP pomocou únikových sekvencií

<?php
echo "<html>\n\t<head>\n\t\t<title>Pokusná stránka v PHP<title/>\n";
echo "\t</head>\n\t<body>\n";
echo "\t\tAhoj svet!\n";
echo "\t</body>\n</html>";
?>

// výsledok
<html>
  <head>
    <title>Pokusná stránka v PHP<title/>
  </head>
  <body>
    Ahoj svet!
  </body>
</html>

Interpretácia premenných v reťazcoch

$zviera = "mačka";
echo "Chované zviera: $zviera";
// kód vypíše: Chované zviera: mačka

Ak chceme do textu dostať znak dolára, musíme ho označiť pomocou spätného lomítka:

echo "\$zviera = $zviera";
// vypíše: $zviera = mačka

Zložitejšia situácia nastane, keď chceme vo vnútri reťazca vypísať niektorú premennú asociatívneho poľa, napr. $odprac_hod["januar"]:

echo "Odpracované hodiny v januári: $odprac_hod["januar"] hodín";
// chyba, dôjde k predčasnému ukončeniu reťazca

Rovnako nie je možné vložiť celý reťazec do apostrofov, pretože nedôjde k náhrade premennej:

echo 'Odpracované hodiny v januári: $odprac_hod["januar"] hodín';
// chyba, nedôjde k náhrade obsahu premennej

Nefunguje ani opačný prístup, tj. uzavretie reťazca do úvodzoviek s vložením indexu do apostrofov:

echo "Odpracované hodiny v januári: $odprac_hod['januar'] hodín";
// chyba, PHP tento zápis nepochopí

Fungujúci spôsob zápisu vyzerá značne neštandardne:

echo "Odpracované hodiny v januári: $odprac_hod[januar] hodín";
// OK, január je braný ako neznáma konštanta
// vyhodnotená ako "január"

Doporučuje sa používať rozšírenú syntax (pridaná od PHP 4), ktorá umožňuje vložiť vo vnútri reťazca meno komplexnej premennej do zložených zátvoriek:

echo "Odpracované hodiny v januári: {$odprac_hod["januar"]} hodín";
// OK, vyhodnotené bez problémov

Týmto spôsobom je možné vo vnútri reťazcov vyhodnocovať premenné, či už ide o asociatívne pole, dvoj- či viacrozmerné pole alebo členské premenné objektov.

Syntax HEREDOC

Ďalší spôsob zápisu reťazcov sa volá HEREDOC. Používa sa najmä pri rozsiahlejších textoch s množstvom špeciálnych znakov vrátane úvodzoviek a apostrofov, ktoré je príliš namáhavé označovať pomocou únikových sekvencií. Celý reťazec je na začiatku označený pomocou <<<identifikátor a na konci pomocou identifikátor, pričom identifikátor je ľubovoľný reťazec, ktorý sa v texte, ktorý má byť do premennej uložený, nenachádza.

$a = 100;
$text = <<<HTXT
Toto je text priradený premennej "text" pomocou syntaxe HEREDOC. Vo vnútri textu môžeme používať aj apostrofy ('nieco'), sú nahradzované mená premenných ich obsahom (\$a = $a) a ako je vidieť, je možné používať aj únikové sekvencie (\\, \", \$ atď.)
HTXT;
echo $text;