Lekce 2 - PHP funkce pro výpis textových řetězců
V předchozí lekci, Úvod do textových řetězců v PHP, jsme se dozvěděli, jak vytvářet textové řetězce, vysvětlili jsme si jejich slučování a výjimky, které při tom můžou nastat.
V této lekci kurzu PHP funkcí si vyjmenujeme a detailně popíšeme základní funkce pro výpis textových řetězců, které je dobré znát.
Funkce pro výpis textových řetězců
Mezi základní funkce pro výpis textových řetězců patří rozhodně
echo()
, print()
, printf()
a pro
programátora velmi užitečná funkce var_dump()
. Pomocí těchto
funkcí vypíšeme na naší stránku textové řetězce nebo proměnné, které
budou viditelné i pro jiné uživatele naší webové stránky.
echo()
Je základní funkce pro výpis textových řetězců. Funkce
echo()
není tak úplně funkcí, jelikož závorky, které se u
funkcí běžně píšou, tady můžeme vynechat. Můžeme zde vypisovat
libovolný počet argumentů a proměnných různých datových typů než
string
. Jednoduchý výpis textového řetězce provedeme
takto:
echo "Toto je náš text<br/>"; echo("Tento zápis také funguje");
Oba tyto způsoby nám v prohlížeči vypíše:
Do funkce echo()
lze předávat libovolné množství parametrů
a proměnných, dochází pak ke spojení parametrů a proměnných:
$parametry = "parametrech"; echo "Toto ","je ","text ","o ","více ",$parametry;
Výsledkem je řetězec:
print()
Je podobná funkci echo()
, ale o trochu pomalejší. Funkce
print()
vždy vrací hodnotu 1
. Hlavním rozdílem je
nemožnost zápisu parametrů oddělených čárkou. Pokud bychom chtěli zapsat
více textových řetězců, musíme je sloučit pomocí operátoru
.
:
$pole = array("zábava!", "nuda!"); print 'Slučování '.'textových '.'řetězců '.'je '.$pole[0];
Výsledkem je řetězec:
printf()
Tato funkce nám umožňuje vypisovat formátovaný výstup.
Pokud bychom například chtěli číslo uložené v proměnné převést na
číslo desetinné o různém počtu desetinných míst nebo zjistit, jaký znak
se schovává na pozici 70 v ASCII tabulce, využijeme k tomu právě funkci
printf()
. Ve funkci printf()
můžeme použít tyto
formátovací značky:
Formát | Popis | Příklad |
---|---|---|
%% |
Vrací znak % a formátovou značku za ním |
%%c => %c |
%b |
Číslo bude zformátováno jako binární | 20 => 10100 |
%c |
Číslo bude zformátováno jako znak s ASCII hodnotou | 70 => F |
%d |
Číslo bude zformátováno jako celé číslo | 53,2 => 53 |
%e |
Argument bude zformátován jako vědecký zápis | 20 => 2.0e+1 |
%E |
To samé jako předchozí, ale s velkými písmeny | 20 => 2.0E+1 |
%u |
Číslo bude zformátováno jako unsigned (celé kladné číslo většího rozsahu) | 2 => 2 |
%f |
Číslo bude zformátováno jako desetinné číslo | 5 => 5.000000 |
%F |
Číslo bude zformátováno jako desetinné číslo bez regionálního nastavení | 5 => 5.000000 |
%g |
zkratka pro %e a %f |
20 => 20 |
%G |
zkratka pro %E a %f |
20 => 20 |
%s |
Argument je zformátován jako textový řetězec | 20 => "20" |
%o |
Číslo bude zformátováno do osmičkové soustavy | 20 => 24 |
%x |
Číslo bude zformátováno do šestnáctkové soustavy (malá písmena) | 154 => 9a |
%X |
Číslo bude zformátováno do šestnáctkové soustavy (velká písmena) | 154 => 9A |
%+d |
Číslo bude zformátováno jako celé číslo se znaménkem | 50 => +50 |
Typů formátů je opravdu mnoho, na příkladu si ukážeme použití některých z nich:
$vysledek = 35; $reseni = array('správné', 'chybné'); printf('Váš výsledek je <i>%f</i> a to je <b>%s</b> řešení.', $vysledek, $reseni[0]);
První proměnná $vysledek
jako celé číslo, byla
zformátována jako desetinné číslo bez specifikovaného počtu míst pomocí
formátu %f
. Druhá proměnná $reseni[0]
jako pole
dvou textových řetězců, kde vypisujeme pouze ten první, byla zformátována
jako text pomocí formátu %s
.
Výstup na stránce bude:
Pokud chceme specifikovat počet desetinných míst, bude formát trochu zajímavější:
$cislo = 5; printf('Číslo %.2f je desetinné číslo', $cislo);
a dostaneme textový řetězec:
Pokud bychom z nějakého důvodu chtěli na stránku vypsat
nějakou z formátových značek, lze ji vypsat přidáním dalšího znaku
%
před formátovou značku. Například při napsání
%%b
se na stránku vypíše formátová značka %b
jako text a žádný textový řetězec podle ní nebude zformátován.
Prohazování a zarovnávání argumentů
Argumenty ve funkci pro výpis printf()
lze prohazovat a
libovolně zarovnávat. Zápis formátových značek se mění. Pro
specifikování pozice, kam má být příslušný argument vložen a vhodně
zformátován, se používá znak %
a za ním číslo n-tého
argumentu, například %2
pro argument na druhé pozici ve funkci.
Po čísle pro specifikování pozice musíme napsat formátovou značku, podle
které bude argument zformátován. Místo znaku %
použijeme pro
PHP velice známý znak dolaru $
a za něj vložíme formátovací
značku bez %
:
$cislo_pet = 5; $cislo_sest = 6; $cislo_sedm = 7; printf('Vybrané číslo %3$.2f je desetinné číslo', $cislo_pet, $cislo_sest, $cislo_sedm);
Zde vybíráme argument ve funkci, který se nachází na třetí pozici
%3$
a chceme ho zformátovat na desetinné číslo se dvěma
desetinnými místy .2f
. Celý zápis tedy je
%3$.2f
.
Je důležité používat správný typ zápisu řetězce
pomocí apostrofů ''
. Pokud ale chceme použít uvozovky
""
musíme v tomto zápisu znak $
odescapovat. Pokud
tak neuděláme, vypisujeme proměnnou, která nemusí existovat a dostaneme
chybovou hlášku.
Argumenty ve funkci můžeme také zarovnávat a různě upravovat jejich formátování. Můžeme před ně vkládat mezery a nebo jiné znaky libovolného počtu, který si určíme:
$zvire = 'kůň'; printf("(%10s)", $zvire);
Pomocí toho zápisu vypíšeme na stránku textový řetězec s obsahem
proměnné $zvire
s minimálně deseti mezerami. %10s
znamená zformátování proměnné na text s celkovou délkou 10 znaků. Text
kůň
uložený v proměnné má délku 3 znaky, to znamená, že
zbylých 7 znaků bude doplněno o 7 mezer zleva. Dostaneme text:
( kůň)
Znak mezery můžeme vypisovat také zprava přidáním znaku -
před znak %
:
$zvire = 'kůň'; printf("(%-10s)", $zvire);
a mezery se opravdu vypíší zprava:
(kůň )
Možná jste si všimli, že je mezer ve skutečnosti 5. Je to
zapříčiněno diakritikou znaků ů
a ň
. Tyto
znaky se totiž tváří jako jeden znak, ve skutečnosti to jsou ale znaky
dva.
Chceme-li místo mezer před proměnnou v textovém řetězci vkládat jiný
znak, například #
, před znak %
přidáme apostrof s
naším znakem '#
:
$zvire = 'opice'; printf("(%'#10s)<br/>", $zvire); // Znaky # se vypíší zleva printf("(%-'#10s)", $zvire); // Znaky # se vypíší zprava
Výstupem je:
Diagnostický výpis
Následující funkce slouží pouze pro diagnostické účely a na produkčním serveru (tedy tam, kde pojede ostrá verze webu) by se vůbec neměly objevit.
Při ladění aplikace občas potřebujeme zjistit obsah nějaké proměnné.
Výpis pomocí funkce echo()
nás mnohdy neuspokojí, protože
např. hodnota null
nebude vypsána, stejně tak nepoznáme hodnotu
false
a podobně. Zkusme si různé datové typy:
$a = null; $b = true; $c = array("Jablko", "Hruška", 'ovoce' => 'Švestka'); echo $a, '<br/>'; echo $b, '<br/>'; echo $c, '<br/>';
Výstup je:
PHP nás také varuje, že převádí pole na string
.
Proměnná s datovým typem null
se nám nevypsala vůbec. U
druhé proměnné s boolean hodnotou true
se nám
vypsala 1
a nevíme, jestli se opravdu jedná o boolean nebo o
celé číslo integer. Poslední funkce nám vypíše datový
typ Array (pole).
print_r()
Funkce pro výpis print_r()
vypíše hodnoty a informace o
proměnné v lidsky čitelné podobě. V praxi to znamená, že pole jsou hezky
rozepsaná jako klíč => hodnota
. Předejme funkci naše
původní data:
$a = null; $b = true; $c = array("Jablko", "Hruška", 'ovoce' => 'Švestka'); print_r($a); echo '<br/>'; print_r($b); echo '<br/>'; print_r($c);
Na stránce se nám vypíše uspořádaný výstup:
1 Array ( [0] => Jablko [1] => Hruška [ovoce] => Švestka )
Pro výpis polí je funkce opravdu perfektní. Bude se nám hodit, jelikož je občas dobré se přesvědčit, že je v poli uloženo opravdu to, co chceme.
Pokud bychom chtěli, aby funkce svůj výstup pouze vrátila
(nikoli vypsala), stačí uvést druhý parametr s hodnotou
true
.
var_dump()
Funkce pro výpis var_dump()
vypíše i vrátí argument ve
formátu, který je lidsky čitelný a který navíc obsahuje datové typy.
Předejme funkci opět naše data:
$a = null; $b = true; $c = array("Jablko", "Hruška", 'ovoce' => 'Švestka'); var_dump($a); echo '<br/>'; var_dump($b); echo '<br/>'; var_dump($c);
Výstup:
NULL boolean true array (size=3) { [0] => string 'Jablko' (length=6) [1] => string 'Hruška' (length=7) ['ovoce'] => string 'Švestka' (length=8) }
Tento výpis je pro programátora velmi přínosný. Vidí datový typ, jeho velikost a index či klíč pole.
die()
Jak již název napovídá, funkce die()
zastaví vykonávání
skriptu. Předtím však vypíše své parametry. Nabízí se k použití s
funkcí var_dump
. Takto můžeme při hledání chyb svůj program
jednoduše "krokovat", umisťovat die(var_dump($promenna))
na
různá místa programu a zjišťovat, zda jsou v tomto bodě správná
data.
Ekvivalentem funkce je metoda nebo konstrukce exit()
, která má
stejné parametry a i dělá to samé.
Funkce die()
bývá často nesprávně uváděna v
učebních materiálech k výpisu chyb. Ideálně by se to mělo řešit pomocí
výjimek. I bez nich by se však aplikace neměla takto násilně ukončit, ale
chybu nějak elegantně vypsat např. do indexu se šablonou.
V další lekci, Rozdělování a spojování textových řetězců, se dozvíme, jak nahrazovat, měnit znaky nebo celé úseky textových řetězců.