2. diel - PHP funkcie pre výpis textových reťazcov
V predchádzajúcej lekcii, Úvod do textových reťazcov v PHP , sme sa dozvedeli, ako vytvárať textové reťazce, vysvetlili sme si ich zlučovanie a výnimky, ktoré pri tom môžu nastať.
V tejto lekcii kurze PHP funkcií si vymenujeme a detailne popíšeme základné funkcie pre výpis textových reťazcov, ktoré je dobré poznať.
Funkcie pre výpis textových reťazcov
Medzi základné funkcie pre výpis textových reťazcov patrí rozhodne
echo()
, print()
, printf()
a pre
programátora veľmi užitočná funkcia var_dump()
. Pomocou
týchto funkcií vypíšeme na našej stránku textové reťazce alebo
premenné, ktoré budú viditeľné aj pre iných užívateľov našej webovej
stránky.
echo()
Je základné funkcie pre výpis textových reťazcov. Funkcia
echo()
nie je tak úplne funkcií, pretože zátvorky, ktoré sa u
funkcií bežne píšu, tu môžeme vynechať. Môžeme tu vypisovať
ľubovoľný počet argumentov a premenných rôznych dátových typov než
string
. Jednoduchý výpis textového reťazca vykonáme takto:
echo "Toto je náš text<br/>"; echo("Tento zápis také funguje");
Oba tieto spôsoby nám v prehliadači vypíše:
Do funkcie echo()
možno odovzdávať ľubovoľné množstvo
parametrov a premenných, dochádza potom k spojeniu parametrov a
premenných:
$parametry = "parametrech"; echo "Toto ","je ","text ","o ","více ",$parametry;
Výsledkom je reťazec:
print()
Je podobná funkcii echo()
, ale o trochu pomalší. Funkcia
print()
vždy vráti hodnotu 1
. Hlavným rozdielom je
nemožnosť zápisu parametrov oddelených čiarkou. Ak by sme chceli zapísať
viac textových reťazcov, musíme ich zlúčiť pomocou operátora
.
:
$pole = array("zábava!", "nuda!"); print 'Slučování '.'textových '.'řetězců '.'je '.$pole[0];
Výsledkom je reťazec:
printf()
Táto funkcia nám umožňuje vypisovať formátovaný
výstup. Ak by sme napríklad chceli číslo uložené v premennej previesť na
číslo desatinné o rôznom počte desatinných miest alebo zistiť, aký znak
sa schováva na pozíciu 70 v ASCII tabuľke, využijeme na to práve funkcii
printf()
. Vo funkcii printf()
môžeme použiť tieto
formátovacie značky:
formát | popis | Príklad |
---|---|---|
%% |
Vracia znak % a formátovať značku za ním |
%% c =>% c |
%b |
Číslo bude naformátované ako binárny | 20 => 10100 |
%c |
Číslo bude naformátované ako znak s ASCII hodnotou | 70 => F |
%d |
Číslo bude naformátované ako celé číslo | 53,2 => 53 |
%e |
Argument bude formátuje ako vedecký zápis | 20 => 2.0e + 1 |
%E |
To isté ako predchádzajúce, ale s veľkými písmenami | 20 => 2.0E + 1 |
%u |
Číslo bude naformátované ako unsigned (celé kladné číslo väčšieho rozsahu) | 2 => 2 |
%f |
Číslo bude naformátované ako desatinné číslo | 5 => 5.000000 |
%F |
Číslo bude naformátované ako desatinné číslo bez regionálneho nastavenia | 5 => 5.000000 |
%g |
skratka pre %e a %f |
20 => 20 |
%G |
skratka pre %E a %f |
20 => 20 |
%s |
Argument sa formátuje ako textový reťazec | 20 => "20" |
%o |
Číslo bude naformátované do osmičkovej sústavy | 20 => 24 |
%x |
Číslo bude naformátované do hexadecimálne sústavy (malé písmená) | 154 => 9a |
%X |
Číslo bude naformátované do hexadecimálne sústavy (veľké písmená) | 154 => 9A |
%+d |
Číslo bude naformátované ako celé číslo so znamienkom | 50 => +50 |
$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]);
Prvá premenná $vysledek
ako celé číslo, bola
naformátovaná ako desatinné číslo bez špecifikovaného počtu miest
pomocou formátu %f
. Druhá premenná $reseni[0]
ako
pole dvoch textových reťazcov, kde vypisujeme len ten prvý, bola
naformátovaná ako text pomocou formátu %s
.
Výstup na stránke bude:
Ak chceme špecifikovať počet desatinných miest, bude formát trochu zaujímavejšie:
$cislo = 5; printf('Číslo %.2f je desetinné číslo', $cislo);
a dostaneme textový reťazec:
Ak by sme z nejakého dôvodu chceli na stránku vypísať
nejakú z formátových značiek, možno ju vypísať pridaním ďalšieho znaku
%
pred formátovať značku. Napríklad pri napísanie
%%b
sa na stránku vypíše formátové značka %b
ako
text a žiadny textový reťazec podľa nej nebude formátuje.
Vyhadzovania a zarovnávanie argumentov
Argumenty vo funkcii pre výpis printf()
možno prehadzovať a
ľubovoľne zarovnávať. Zápis formátových značiek sa mení. Pre
špecifikovanie pozície, kam má byť príslušný argument vložený a vhodne
formátuje, sa používa znak %
a za ním číslo n-té argumentu,
napríklad %2
pre argument na druhej pozícii vo funkcii. Po
čísle pre špecifikovanie pozície musíme napísať formátovať značku,
podľa ktorej bude argument formátuje. Namiesto znaku %
použijeme
pre PHP veľmi známy znak dolára $
a za neho vložíme
formátovacie 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);
Tu vyberáme argument vo funkcii, ktorý sa nachádza na tretej pozícii
%3$
a chceme ho sformátovať na desatinné číslo s dvomi
desatinnými miestami .2f
. Celý zápis teda je
%3$.2f
.
Je dôležité používať správny typ zápisu reťazca pomocou
apostrofov ''
. Pokiaľ ale chceme použiť úvodzovky
""
musíme v tomto zápise znak $
odescapovat. Ak tak
neurobíme, vypisujeme premennú, ktorá nemusí existovať a dostaneme chybovú
hlášku.
Argumenty vo funkcii môžeme tiež zarovnávať a rôzne upravovať ich formátovanie. Môžeme pred nich vkladať medzery a alebo iné znaky ľubovoľného počtu, ktorý si určíme:
$zvire = 'kůň'; printf("(%10s)", $zvire);
Pomocou toho zápisu vypíšeme na stránku textový reťazec s obsahom
premennej $zvire
s minimálne desiatimi medzerami.
%10s
znamená sformátovanie premennej na text s celkovou dĺžkou
10 znakov. Text kůň
uložený v premennej má dĺžku 3 znaky, to
znamená, že zvyšných 7 znakov bude doplnené o 7 medzier zľava. Dostaneme
text:
( kůň)
Znak medzery môžeme vypisovať tiež sprava pridaním znaku -
pred znak %
:
$zvire = 'kůň'; printf("(%-10s)", $zvire);
a medzery sa naozaj vypíšu sprava:
(kůň )
Možno ste si všimli, že je medzier v skutočnosti 5. Je to
zapríčinené diakritikou znakov ů
a ň
. Tieto znaky
sa totiž tvári ako jeden znak, v skutočnosti to sú ale znaky dva.
Ak chceme miesto medzier pred premennou v textovom reťazci vkladať iný
znak, napríklad #
, pred znak %
pridáme apostrof s
naším znakom '#
:
$zvire = 'opice'; printf("(%'#10s)<br/>", $zvire); // Znaky # se vypíší zleva printf("(%-'#10s)", $zvire); // Znaky # se vypíší zprava
Výstupom je:
Diagnostický výpis
Nasledujúce funkcie slúži len na diagnostické účely a na produkčnom serveri (teda tam, kde pôjde ostrá verzia webu) by sa vôbec nemali objaviť.
Pri ladení aplikácie občas potrebujeme zistiť obsah nejaké premenné.
Výpis pomocou funkcie echo()
nás mnohokrát neuspokojí, pretože
napr. Hodnota null
nebude vypísaná, rovnako tak nepoznáme
hodnotu false
a podobne. Skúsme si rôzne dátové 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 tiež varuje, že prevádza polia na string
.
Premenná s dátovým typom null
sa nám nevypísala vôbec. Pri
druhej premennej s boolean hodnotou true
sa nám
vypísala 1
a nevieme, či sa naozaj jedná o boolean alebo o celé
číslo integer. Posledná funkcia nám vypíše dátový typ
Array (pole).
print_r()
Funkcie pre výpis print_r()
vypíše hodnoty a informácie o
premenné v ľudsky čitateľnej podobe. V praxi to znamená, že polia sú
pekne rozčlenené ako klíč => hodnota
. Odovzdajte funkciu
naše pôvodné dáta:
$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ánke sa nám vypíše usporiadaný výstup:
1 Array ( [0] => Jablko [1] => Hruška [ovoce] => Švestka )
Pre výpis polí je funkcia naozaj perfektný. Bude sa nám hodiť, pretože je občas dobré sa presvedčiť, že je v poli uložené naozaj to, čo chceme.
Ak by sme chceli, aby funkcia svoj výstup len vrátila (nie
vypísala), stačí uviesť druhý parameter s hodnotou true
.
var_dump()
Funkcie pre výpis var_dump()
vypíše aj vráti argument vo
formáte, ktorý je ľudsky čitateľný a ktorý navyše obsahuje dátové
typy. Odovzdajte funkciu opäť naše dáta:
$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 pre programátora veľmi prínosný. Vidí dátový typ, jeho veľkosť a index či kľúč poľa.
die()
Ako už názov napovedá, funkcia die()
zastaví vykonávanie
skriptu. Predtým však vypíše svoje parametre. Ponúka sa na použitie s
funkciou var_dump
. Takto môžeme pri hľadaní chýb svoj program
jednoducho "krokovať", umiestňovať die(var_dump($promenna))
na
rôzne miesta programu a zisťovať, či sú v tomto bode správne údaje.
Ekvivalentom funkcia je metóda alebo konštrukcie exit()
,
ktorá má rovnaké parametre a aj robí to isté.
Funkcia die()
býva často nesprávne uvádzaná v učebných
materiáloch k výpisu chýb. Ideálne by sa to malo riešiť pomocou výnimiek.
Aj bez nich by sa však aplikácia nemala takto násilne ukončiť, ale chybu
nejako elegantne vypísať napr. Do indexu sa šablónou. . [Hint
V ďalšej lekcii, Rozdeľovanie a spájanie textových reťazcov , sa dozvieme, ako nahrádzať, meniť znaky alebo celé úseky textových reťazcov.