Lekce 1 - Úvod do textových řetězců v PHP
Vítejte u první úvodní lekce PHP manuálu. V tomto kurzu si projdeme všechny funkce PHP manuálu. V dnešní lekci si projdeme textové řetězce a jejich funkce pro práci s nimi. Vysvětlíme si také způsoby psaní těchto řetězců, slučování i sčítání.
Pokud nemáte nainstalované PHP a nevíte jak ho nainstalovat, je lepší si prvně projít článek na instalaci PHP a MySQL pomocí XAMPP nebo WAMP. Po instalaci PHP si můžete také zkoušet různé pokusy a vytvářet své webové stránky
Textové řetězce
Textové řetězce jsou pole znaků. Lze tedy říci, že to jsou znaky
seřazené v jedné konečné množině, jejíž délka je omezená velikostí
paměti. Řetězce můžeme v PHP psát pomocí apostrofů ''
nebo
uvozovek ""
. Rozdíly mezi nimi se dozvíme dále
Textové řetězce pomocí apostrofů
Otevřeme si textový editor nebo jiné vývojové prostředí a vytvoříme
si soubor s příponou .php
. Do něho nadeklarujeme novou
proměnnou $retezec
, kam uložíme svůj text:
$retezec = 'Ahoj světe';
Nyní náš text chceme zobrazit na naší stránce. K tomu nám budou
sloužit základní funkce, například echo()
nebo
print()
. My použijeme funkci print()
, jelikož se
jedná o jednoduchý textový řetězec pouze s jedním parametrem:
$retezec = 'Ahoj světe'; print $retezec;
Funkci print()
a echo
můžeme psát
přímo bez závorek a nebo se závorkami: print($retezec);
Po úspěšném spuštění našeho PHP skriptu se na stránce objeví náš text:
Ahoj světe
Chceme-li text zalomit, použijeme HTML tag pro odřádkování
<br />
. Zároveň se můžeme potýkat s problémem, jak
napsat do textu další apostrofy. Slouží nám k tomu značka obráceného
lomítka \
, kterou vložíme před apostrof. Pokud bychom tak
neudělali, řetězec by se ukončil a my se tak pravděpodobně dočkáme
syntaktické chyby. Náš kód vypadá takto:
$retezec = 'Ahoj světe <br> tímto tě \'zdravím\''; print $retezec;
Dojde tak k zalomení a zároveň k odescapování textu. Apostrofy se vypíší na stránce:
Ahoj světe tímto tě 'zdravím'
Pro napsání zpětného lomítka \
použijeme stejný princip
jako při psaní apostrofů:
$retezec = 'Ahoj světe, tímto tě \\zdravím'; print $retezec;
A dostaneme výsledek:
Ahoj světe, tímto tě \zdravím
Výhodou psaní textových řetězců pomocí apostrofů je rychlost zpracování textu. Avšak zde nemůžeme psát speciální znaky a vkládat proměnné.
Textové řetězce pomocí uvozovek
Psaní textových řetězců pomocí uvozovek je podobné jako s apostrofy. Avšak s tím rozdílem, že můžeme do řetězců zapisovat speciální znaky a vkládat proměnné. Vypisování textu je ale nepatrně pomalejší.
Použití speciálních znaků
Uvozovky nám umožňují do řetězce zapisovat speciální znaky, například:
\n
- odřádkování textu (Newline)\r
- odřádkování textu (Carriage_return), tuto značku používal operační systém MAC OS do verze 9, MAC OS X používal již značku\n
\t
- vytvoření tabulátoru
Psaní pomocí uvozovek s použitím speciálních znaků vypadá takto:
$retezec = "Toto je textový řetězec vyjádřený s uvozovkami \n tento text je odřádkován"; print $retezec;
Nyní nám nic nebrání v tom, abychom do našeho textu vložili také apostrofy:
$retezec = "Toto je textový řetězec vyjádřený s 'uvozovkami' \n tento text je odřádkován"; print $retezec;
Pro escapování znaku uvozovky "
, dolaru $
nebo
zpětného lomítka \
použijeme stejný způsob jako pro řetězec
s apostrofy. Mějme ale na paměti, že speciální značky
(\n
, \r
, \t
) pro řetězce s apostrofy
nefungují! Avšak pokud chceme zapisovat například do textového
souboru nebo konzole, lze tyto značky použít.
Vkládání proměnných do textových řetězců
Do textových řetězců vyjádřenými uvozovkami můžeme vkládat proměnné.
Příkladem může být vytvoření nové proměnné $pozdrav
,
do které napíšeme náš nejoblíbenější pozdrav:
$pozdrav = "Zdravím"; $retezec = "$pozdrav, neznámý uživateli"; print $retezec;
Výsledkem na stránce potom bude:
Zdravím, neznámý uživateli
Pokud chceme mít na výběr z více pozdravů, tak se nám proměnná stává složitější a využijeme například pole s klíčem jako řetězec:
$pozdrav = array( 'obecny' => "Zdravím", 'formalni' => "Dobrý den", 'neformalni' => 'Čáu' ); $retezec = "${pozdrav['formalni']}, neznámý uživateli"; print $retezec; // Funguje také tento zápis: $retezec = "{$pozdrav['formalni']}, neznámý uživateli"; print $retezec;
A jestli jsme se někde nepřepsali, měli bychom na stránce vidět následující:
Dobrý den, neznámý uživateli Dobrý den, neznámý uživateli
Mixování variant
Do textových řetězců můžeme také vkládat HTML kód nebo JavaScript. Mnohdy nám právě mixování variant ušetří práci, avšak ve správně navrženém PHP kódu by k tomuto nemělo docházet.
My však toto pravidlo nedodržíme a mixování variant si vysvětlíme. Pokud chceme vytvořit například novou tabulku s daty narození našich rodičů nebo sourozenců, nezbývá nám nic jiného, než využít mixování variant. Provedeme to takto:
$rodina = ' <table border="1"> <thead> <th>Jméno a příjmení</th> <th>Datum narození</th> </thead> <tr> <td>Pavel Novák</td> <td>21.03.1995</td> </tr> </table>'; print $rodina;
Textový řetězec uložený v proměnné $rodina
jsme uzavřeli
do apostrofů a uvnitř řetězce s HTML kódem používáme uvozovky.
Mnohonásobně si tímto usnadníme práci, jinak bychom každý apostrof museli
odescapovat. Zobrazí se nám tabulka:
Naopak textový řetězec s JavaScriptem uzavíráme do uvozovek a uvnitř používáme apostrofy:
$js = "<script> alert('Moje rodina je senzační!'); </script>"; print $js;
Výsledkem je dialogové okno se zadaným textem:
Slučování textových řetězců
Máme-li dva nebo více textových řetězců, například uložených v
proměnných, které chceme slučovat, využijeme pro jejich slučování
operátor .
namísto +
, jak už to bývá v ostatních
programovacích jazycích. Operátor +
používáme ke
sčítání číselných hodnot.
Dva textové řetězce sloučíme do jednoho za pomocí teček:
$slucovani = 'Toto je věta, ' . 'která je sloučená ' . 's touto větou'; print $slucovani;
Po uložení a spuštění skriptu uvidíme výsledek:
Toto je věta, která je sloučená s touto větou
Slučování textu funguje i u proměnných, ve kterých první text může být zapsán uvozovkou a druhý apostrofem:
$jazyk = "PHP"; $slucovani = 'Programování v '. $jazyk .' mě baví!'; print $slucovani;
Textové řetězce se nám sloučí:
Programování v PHP mě baví!
Slučovat textové řetězce můžeme také pomocí operátoru
.=
docílíme tak stejného výsledku
$slucovani = 'Rádi programujeme v: '; $slucovani .= 'PHP, '; $slucovani .= 'C#'; print $slucovani;
Pro takový způsob slučování opisujeme název proměnné, u které chceme
slučovat text, v našem případě je to proměnná $slucovani
, ke
které přidáváme další text opsáním této proměnné a přidáním
operátoru .=
. Tento operátor nám usnadňuje práci, stejně jako
operátory ++
, +=
, ==
, !=
a
další.
Takový způsob slučování lze zapsat i jinak:
$slucovani = 'Rádi programujeme v: '; $slucovani = $slucovani . 'PHP, '; $slucovani = $slucovani . 'C#'; print $slucovani;
Avšak proč si komplikovat život, když existují operátory. Výsledkem bude stále to stejné:
Rádi programujeme v: PHP, C#
Slučování řetězce a čísla
Slučování textového řetězce s jiným textovým řetězcem je jasná záležitost s očekávaným výsledkem. Zajímavější je slučování textových řetězců s čísly:
$cislo = 13; $slucovani = 'Naše oblíbené číslo je ' . $cislo; print $slucovani;
I přestože slučujeme text s číslem, uvidíme na obrazovce toto:
Naše oblíbené číslo je 13
Číslo je jednoduše vloženo do textového řetězce.
Ale pokud sčítáme číslo s číslem umístěném v textovém řetězci
pomocí operátoru +
:
$slucovani = 10 + '15'; print $slucovani;
Dojde k běžnému sčítání dvou čísel:
25
Sčítáme-li číslo s textem, kdy i v textu je zapsané nějaké číslo, nemá zde sčítání žádný vliv a dostaneme tak číslo, které jsme se s textových řetězcem pokoušeli sčítat:
$slucovani = 18 + ', to je mé oblíbené číslo hned za číslem 13'; print $slucovani;
Výsledkem je pouze číslo a textový řetězec je vypuštěn:
18
Avšak při sčítání čísla s textovým řetězcem, v němž je číslo na začátku:
$slucovani = 12 + '5 je kolik?'; print $slucovani;
Jsou tyto čísla sečteny a zbytek textu je vypuštěn:
17
V novějších verzích PHP pokud chceme slučovat textový
řetězec s číslem uvnitř řetězce nebo na začátku, pomocí operátoru
+
nebo +=
, budeme již na tento problém upozorněni
formou výjimky A non well formed numeric value encountered
.
Touto lekcí jsme se uvedli do problematiky textových řetězců a práce s nimi.
V další lekci, PHP funkce pro výpis textových řetězců, si vysvětlíme jednotlivé PHP funkce pro výpis textových řetězců, formátování textu a práci s argumenty.