IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Mezi 13:00 až cca 16:00 proběhne odstávka sítě z důvodu aktualizace. Web bude po celou dobu nedostupný.

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:

Funkce echo()
localhost

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:

Funkce echo() 2
localhost

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:

Funkce print()
localhost

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:

Příklad funkce printf()
index.php

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:

Příklad funkce printf() II
index.php

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:

Příklad opice
index.php

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:

Diagnostický zápis
index.php

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ů.


 

Předchozí článek
Úvod do textových řetězců v PHP
Všechny články v sekci
PHP funkce
Přeskočit článek
(nedoporučujeme)
Rozdělování a spojování textových řetězců
Článek pro vás napsal Pavel Vaněček
Avatar
Uživatelské hodnocení:
11 hlasů
Autor se věnuje psaní článků na Itnetwork.cz
Aktivity