Základy PHP
Josef Podstata
KTE/IZTT - Zpracování textu, tabulek a prezentací
Univerzita Palackého v Olomouci
2 Tento výukový text slouží k seznámení se základy vývoje dynamických
webových stránek za použití jazyka PHP. Pro pochopení látky je doporučeno
znát alespoň základy jazyku HTML.
Text byl zpracován v Microsoft Word for Mac (2011) za účelem semestrálního
projektu do předmětu KTE/IZTT vyučovaného na Univerzitě Palackého v
Olomouci.
Obsah
1. Úvod .......................................................................................................... 4
2. Struktura .................................................................................................... 5
3. Proměnné, datové typy .............................................................................. 6
4. Pole ............................................................................................................ 8
5. Řetězce .................................................................................................... 10
6. Konstanty, komentáře .............................................................................. 11
7. Operátory, speciální znaky ...................................................................... 12
8. Podmínky, logické výrazy ........................................................................ 13
9. Cykly ........................................................................................................ 15
10. Funkce ................................................................................................... 16
Zdroje
jakpsatweb.cz
tvorba-webu.cz
cs.wikipedia.org
en.wikipedia.org
PHP 5 a MySQL 5 - Michael Kofler, Bernd Öggl
3 1. Úvod
PHP (zkratka Hypertext Preprocessor) je skriptovací, objektově orientovaný
programovací jazyk se syntaxí podobnou například jazykům C nebo Java. Byl
vyvinut v roce 1995 k tomu, aby se statické HTML stránky obohatily o
dynamičnost. Při jeho použití pro dynamické stránky jsou skripty prováděny
na straně serveru. Je multiplatformní, takže skripty lze většinou přenášet bez
jakýchkoli úprav mezi všemi operačními systémy. PHP je nejrozšířenějším
skriptovacím jazykem pro web.
PHP má tu zvláštnost, že jeho zdrojový kód se vkládá přímo do HTML
dokumentu. Přitom je PHP kód zřetelně oddělený od HTML kódu.
Protože k instalaci a nastavení vlastního serveru na osobním počítači by byl
potřeba velice obsáhlý návod, tyhle kroky přeskočíme a budeme
předpokládat, že všechny naše PHP dokumenty vkládáme přímo na nějaký
už fungující server. Tak se budeme moci soustředit pouze na PHP.
4 2. Struktura
Tady je malý příklad, ve kterém ukážeme umístění kódu PHP a jeho strukturu.
Dokument v PHP by mohl vypadat například takto:
1
2
3
4
5
6
7
8
9
10
<html>
<head>
<title>Hello World v PHP</title>
</head>
<body>
<?php
echo "<p>Hello World!</p>";
?>
</body>
</html>
Když tuto stránku zavoláme pomocí prohlížeče, předá server celý soubor ke
zpracování interpretu PHP. Ten vyhodnotí část začínající <?php (6. řádek) a
končící ?> (8. řádek) a nahradí ji výstupem z interpretu. Zbylá část souboru se
nezmění. Poté je výsledný soubor předán serveru a ten jej předá klientovi
(prohlížeči). V našem případě by se celá PHP část vyhodnotila na <p>Hello
World!</p>, protože příkaz echo slouží pro vypisování. V prohlížeči bychom
pak uviděli pouze napsané "Hello world".
Identifikace PHP kódu:
Standartní značky
Krátký zápis
Dlouhý zápis
<?php
echo blah;
?>
<?
echo blah;
?>
<script language="php">
echo blah;
</script>
<%
echo blah;
%>
Verze ASP
První a třetí zápis fungují vždy, zatímco krátký zápis a tvary ASP pouze
pokud máte správně nastaven program PHP. Proto dále budeme používat
jen první způsob zápisu.
5 3. Proměnné, datové typy
Pod pojmem proměnná si můžeme představit vyhrazené místo v paměti,
které se chová jako úložiště nějaké informace. V PHP začíná název proměnné
vždy znakem dolaru ($), v názvu se mohou vyskytovat pouze znaky ASCII,
číslice a znak podtržítka. Zároveň za znakem $ nesmí následovat číslice.
V PHP se při deklarování proměnné nemusí uvést její typ (jako ve spoustě
programovacích jazyků). PHP podle obsahu proměnné většinou sám pozná,
o jaký typ se jedná.
PHP rozlišuje osm základních datových typů:
může nabývat dvou hodnot - TRUE
nebo FALSE
kladné i záporné celočíselné hodnoty,
obvykle v rozsahu dvou miliard
kladné i záporné hodnoty s plovoucí
desetinnou čárkou
textový řetězec, může obsahovat 256
znaků
pole uchovává několik prvků, prvky
můžou být proměnné i další pole
může obsahovat různé prvky PHP,
např. proměnné, konstanty či funkce
zdroj je speciální typ, který odkazuje
na vnější zdroj
zvláštní datový typ, který nemá
žádnou hodnotu
boolean (bool)
integer (int)
float
string
array
object
resource
NULL
Název proměnné v PHP musí začínat znakem $, hodnotu do proměnné
přiřadíme znaménkem = (rovná se). Každý řádek (příkaz) musí končit
středníkem. Vše si ukážeme na následujícím kódu:
1 <?php
2
$cislo_1 = 4;
3
$cislo_2 = 3.33;
4
$retezec = "Vysledek souctu: ";
5
6
echo $retezec;
7
echo $cislo_1+$cislo_2."\n";
8
9
$cislo_3 = (int) $cislo_2;
10
11
echo "cislo_3 je: ".$cislo_3;
12 ?>
6 Na druhém řádku deklarujeme proměnnou $cislo_1 a přiřadíme mu hodnotu
4 (PHP samo rozpozná celé číslo - int). Na třetím řádku to samé s
proměnnou $cislo_2 a hodnotou 3.33 (číslo s řadovou čárkou - float). Na
čtvrtém řádku vložíme do proměnné $retezec textový řetězec (string)
"Vysledek souctu: ". Pátý řádek je vynechaný pouze pro přehlednost. Na
šestém a sedmém vypisujeme pomocí echo. První co se vypíše je proměnná
$retezec, která se vyhodnotí na text "Vysledek souctu: ", poté chceme vypsat
výsledek součtu proměnných $cislo_1 a $cislo_2, tedy 7,33 (4 + 3,33). PHP si
samo poradí s typem výsledku. I když jsme sčítali typy int a float, výsledek je
typu float. Na odřádkování slouží "\n", tedy další výpis bude pokračovat na
dalším řádku. Více hodnot v příkazu echo oddělujeme tečkou, resp. tečka
slouží ke sloučení několika řetězců (i mimo echo).
Někdy je potřeba typ proměnné změnit manuálně, tzv. přetypovat. Nový typ
proměnné se napíše do kulatých závorek jako na devátém řádku. Tím, že
budeme chtít přetypovat číslo 3,33 na celočíselný typ int, se číslo
nezaokrouhlí, pouze ztratí číslo svou desetinnou část. V proměnné $cislo_3
bude tedy hodnota 3 a díky příkazu echo na jedenáctém řádku ji vypíšeme. V
předešlém sčítání ale vidíme, že si PHP s přetypováním poradilo samo, proto
se manuální převod datových typů nemusí provádět tak často.
Všechny výpočty a práce s proměnnými provede interpret PHP interně, ve
výpisu uvidíme pouze:
Vysledek souctu: 7.33
cislo_3 je: 3
7 4. Pole
Pole se používají velmi často snad ve všech programovacích jazycích. V PHP
mají výhodu velké flexibility. Pole se skládá z klíčů a k nim přiřazených
hodnot (key a value), přičemž klíče jsou typu integer nebo string a hodnoty
mohou být libovolného typu.
Příklad práce s polem:
1 <?php
2
$pole = array("prvni", "druhy");
3
4
$pole[2] = "treti";
5
$pole[] = "ctvrty"
6
7
echo "0: ".$pole[0]."\n2: ".$pole[2];
8
9
print_r($pole);
10
var_dump($pole);
11 ?>
Na druhém řádku inicializujeme pole o dvou prvcích typu string. Prvky pole
se indexují od nuly, tedy první prvek je vlastně nultý atd. Momentálně máme
na nultém indexu řetězec "prvni" a na prvním indexu řetězec "druhy". Na
čtvrtém řádku přidáváme prvek do pole pomocí indexu 2, který je
momentálně přázdný. Na pátém řádku děláme to samé pomocí prázdného
indexu, ten zajistí, že se řetězec "ctvrty" přidá na konec pole jako nový prvek.
Na sedmém řádku chceme vypsat pouze prvky na indexech 0 a 2, tedy
řetězce "prvni" a "treti". Na devátém řádku voláme funkci, která vypíše obsah
pole, v našem případě takhle:
(
[0]
[1]
[2]
[3]
=>
=>
=>
=>
prvni
druhy
treti
ctvrty
)
Pro podrobnější vypsání slouží funkce var_dump($pole) na jedenáctém řádku,
která zobrazí i název pole, počet prvků v poli a ke každému prvku jeho
datový typ. V našem případě takto:
pole(4)
{
[0] =>
[1] =>
[2] =>
[3] =>
}
string(5)
string(5)
string(5)
string(6)
"prvni"
"druhy"
"treti"
"ctvrty"
8 Chceme-li využít místo indexování klíče, můžeme libovolnému klíči přiřadit
hodnotu pomocí znaku =>. Prvek pole může bez problému být další pole.
Ukážeme si to na tomto kódu:
1 <?php
2
$pole = array(
3
"jmeno"
=> "Jan",
4
"prijmeni" => "Novak",
5
"vek"
=> 31
6
"adresa"
=> array(
7
"ulice"
=> "Dlouha 10"
8
"mesto"
=> "Olomouc"
9
"psc"
=> 77900
10
)
11
);
12
13
echo $pole["jmeno"]." ".$pole["prijmeni"];
14
echo "psc: ".$pole["adresa"]["psc"];
15 ?>
Na klíč "jmeno" přiřadíme řetězec "Jan" a tak dále, až se dostaneme ke klíči
"adresa", na který navážeme pole o třech prvcích. Všimněte si, že prvky
"vek" a "psc" jsou celočíselné a všechny ostatní jsou řetězce. Ve většině
programovacích jazyků dokážou pole uchovávat hodnoty pouze jednoho
typu, v PHP ne. Nakonec se vypíše:
Jan Novak
psc: 77900
9 5. Řetězce
Řetězce (string) jsme zatím vytvářeli jen pomocí dvojitých uvozovek
("řetězec"). Druhý způsob je pomocí jednoduchých ('řetezec'). Rozdíl je v
tom, že u dvojitých uvozovek dochází k interpretaci speciálních znaků.
Tabulka speciálních znaků:
posun na nový řádek (znak ASCII 10)
carriage return (znak ASCII 13)
tabulátor (znak ASCII 9)
znak dolaru
dvojité uvozovky
zpětné lomítko
\n
\r
\t
\$
\"
\\
Se znakem \n už jsme se setkali. Je zřejmé, že pokud budeme mít v řetězci
(uzavřeném ve dvojitých závorkách) znak dolaru, bude se chtít automaticky
vyhodnotit na proměnnou, dvojité uvozovky pak budou značit konec řetězce.
Pokud tyto znaky budeme chtít mít ale přímo jako část řetězce, zpětným
lomítkem zajistíme, aby se zobrazily správně. Stejný trik platí na samotné
zpětné lomítko.
V následujícím kódu ukážeme rozdíl dvojitých a jednoduchých uvozovek:
1 <?php
2
$cislo = 42;
3
4
echo "\$cislo je: $cislo \n";
5
echo '\$cislo je: $cislo \n';
6 ?>
A vypíše se:
$cislo je: 42
\$cislo je: $cislo \n
Čtvrtý řádek kódu využívá vyhodnocení proměnné $cislo, kdybychom chtěli
stejný postup použít na prvky v poli, byla by to chyba. Pro práci s prky pole
musíme vždy slučovat řetězce tečkou, např. echo "číslo je: ".$pole[2];.
10 6. Konstanty, komentáře
Konstanty obsahují hodnoty, které se během činnosti programu nemění. Na
rozdíl od proměnných se v jejich názvu nepoužívá znak dolaru a kvůli lepší
přehlednosti se zapisují velkými písmeny. Patří mezi ně například konstanta
PHP_VERSION, která obsahuje verzi PHP. Vlastní konstantu vytvoříme
pomocí funkce define:
1 <?php
2
define("MY_OS", "Mac OS X Lion, 10.7.5");
3
4
echo "Muj operacni system je: ".MY_OS."\n";
5
// nebo
6
// echo "Muj operacni system je Ubuntu\n";
7 ?>
Komentáře (například na pátém a šestém řádku) jsou části kódu, které
interpret PHP ignoruje a nevyhodnocuje. Slouží jen pro přehlednost, aby se
programátor vyznal ve svém kódu například i po několika letech. Vypíše se:
Muj operacni system je: Mac OS X Lion, 10.7.5
Komentáře lze v PHP vkládat třemi způsoby:
jednořádkový komentář známý z
jazyků C, C++ atd.
komentář na více řádků, začíná /* a
končí */
// komentář
/*
komentáře...
*/
# komentář
jednořádkový komentář známý ze
shell skriptů
11 7. Operátory, speciální znaky
Operátory se používají při změně nebo porovnání dat. S některými už jsme se
setkali, například sčítání (+), dále máme samozřejmě odčítání (-), násobení (*)
a dělení (/). Méně častěji používané je modulo (%), tedy zbytek po
celočíselném dělení. Rovná se (=) slouží k přiřazení hodnoty. Pro porovnávání
máme operátory větší (>), menší (<), rovnost (==), nerovnost (!=), větší nebo
rovno (>=) a menší nebo rovno (<=). Důležité je si neplést operátor přiřazení a
porovnání na rovnost (= a ==). Existuje také ternární operátor, ten ale
vysvětlíme až později.
Operátory lze různě kombinovat. Například budeme chtít přičíst trojku k
celočíselné proměnné &a. Můžeme to udělat dvěma způsoby:
1 <?php
2
$a = 1;
3
$a = $a + 2;
4
$a += 2;
5
6
echo $a;
7
$a++;
// to samé jako $a = $a + 1;
8 ?>
Třetí a čtvrtý řádek jsou ekvivalentní. Takže k $a přičteme dvakrát dvojku,
tedy 1 + 2 + 2. Vypíše se 5. Na sedmém řádku jsme použili zkrácený zápis
přičtení jedničky. Tento zápis se používá skoro v každém programovacím
jazyku, funguje jak ++, tak -- pro snížení o jedna.
S několika speciálními znaky už jsme se setkali. Následující tabulka vypisuje
ty nejdůležitější a nejpoužívanější:
označení proměnné
označení indexu prvku pole
označuje skupinu, používají se u
řídících struktur (if, while, ...) a funkcí
předává proměnnou, funkci nebo
třídu jako odkaz
způsob zápisu prvku pole a jeho
hodnoty
$
[]
{}
&
=>
12 8. Podmínky, logické výrazy
Podmíněný příkaz slouží k rozdělení části programu na dvě větve, kde jedna
se má provést jen tehdy, když je splněná nějaká podmínka, a druhá větev se
provede, když podmínka splněna není. Výsledek podmínky je datového typu
boolean, tedy TRUE nebo FALSE. Operátory pro porovnávání jsou vypsány v
předchozí kapitole. Syntaxe je stejná jak u jiných programovacích jazyků:
1 <?php
2
$a = 4;
3
$b = 2;
4
5
if ($a > $b) {
6
echo "Cislo a je vetsi nez b";
7
}
8
else {
9
echo "Cislo b je vetsi nez a";
10
}
11 ?>
Za klíčové slovo if (pátý řádek) píšeme do kulatých závorek podmínku. V
našem případě se ptáme, jestli je $a větší než $b, tedy jestli je 4 větší než 2.
Protože je podmínka pravdivá, provedou se příkazy ve složených závorkách
následujících za podmínkou, tedy jen šestý řádek, a vypíše se "Cislo a je
vetsi nez b". Za else následuje záporná větev, tedy příkazy ve složených
závorkách. Naše podmínka byla pravdivá, proto se záporná větev ignoruje.
Další dotazování můžeme spustit příkazy elseif nebo else if (v PHP fungují
oba tvary):
1 <?php
2
$cislo = 42;
3
if ($cislo == 0) {
4
echo "Cislo je nula";
5
}
6
else if ($cislo > 0) {
7
echo "Cislo je kladne";
8
}
9
else {
10
echo "Cislo je zaporne";
11
}
12 ?>
Často nestačí vyhodnocovat pouze jednu podmínku. Je možné do sebe
vnořovat více if příkazů, ale při více podmínkách se pak stává kód
nepřehledný. Proto existuje možnost dát podmínky do logické soustavy
13 pomocí logických výrazů. Logický výraz "a zároveň" (&& nebo AND) je
pravdivý pokud obě podmínky jsou pravdivé, "nebo" (|| nebo OR) je pravdivý
pokud alespoň jedna z podmínek je pravdivá. Negace (! nebo NOT) zneguje
následující výraz. Příklad:
1 <?php
2
$a = 4;
3
$b = 2;
4
$c = 42;
5
6
echo "Trojuhelnik o stranach $a, $b a $c";
7
8
if (($a+$b > $c) && ($a+$c > $b) && ($b+$c > $a))
9
{
10
echo " LZE sestavit\n";
11
}
12
else {
13
echo " NELZE sestavit\n";
14
}
15 ?>
Kód zjišťuje jestli lze nebo nelze sestavit trojúhelník o stranách $a, $b a $c.
Tedy jestli součet délky libovolných dvou stran je větší než délka strany třetí.
Protože 4 + 2 je menší než 42, trojúhelník nelze sestavit a vypíše se:
Trojuhelnik o stranach 4, 2 a 42 NELZE sestavit
Kratší zápis podmínky můžeme udělat přes ternární operátor, tedy konstrukci
(podmínka) ? (kladná větev) : (záporná větev). Například echo ($a > $b) ? "a je
vetsi" : "b je vetsi";.
14 9. Cykly
Cykly slouží k opakování nějaké části kódu. Například budeme chtít vypsat
všechny prvky pole, které má 20 prvků. Buď můžeme každý prvek vypisovat
zvlášť, nebo jeden jediný příkaz budeme opakovat cyklem, jen pokaždé s
navýšeným indexem. Mezi nejpoužívanější cykly patří cyklus while a for.
Méně používaný je například cyklus do. Ekvivalentní použití while a for:
1 <?php
2
$c = 0;
3
while ($c < 100) {
4
echo $c.", ";
5
$c++;
6
}
7
for ($i = 0; $i < 100; $i++) {
8
echo $i.", ";
9
}
10 ?>
while (podmínka) { tělo; }
While opakuje příkazy v těle tak dlouho, dokud je splněná podmínka. Do
proměnné $c vložíme hodnotu 0. Pak while vyhodnocuje podmínku (je 0
menší jak 100?), vyhodnotí ji na TRUE a provede příkazy ve složené závorce.
Tedy vypíše $c, čárku s mezerou a $c navýší o 1, pak se znova ptá na
podmínku a pořád se opakuje. Pokračuje tak dlouho, dokud je splněná
podmínka. Jakmile se $c navýší na 100, podmínka se vyhodnotí na FALSE a
cyklus skončí. Celý cyklus tedy vypíše čísla od 1 do 99.
for (inicializace; podmínka; inkrementace) { tělo; }
For funguje tak, že inicializace se provede pouze jednou, a to na začátku,
podmínka je testována pokaždé před provedením příkazů v těle a
inkrementace se vyhodnotí pokaždé, jakmile se vyhodnotí tělo. Tedy do
proměnné $i jsme uložili nulu, podmínka testuje, jestli je 0 menší jak 100, tedy
TRUE. Provede se tělo (vypíše se $i, čárka a mezera) a $i se navýší o 1. Poté
se znova vyhodnocuje podmínka a tak dále. V našem případě jsme použili
oba cykly pro stejnou věc - vypsání čísel od 1 do 99.
do { tělo; } while (podmínka);
Do funguje téměř stejně jako cyklus while. Rozdíl je v tom, že u do se tělo
vyhodnotí vždy alespoň jednou a pak se teprve vyhodnocuje podmínka, u
while se tělo nemusí vyhodnotit ani jednou pokud je podmínka už od začátku
FALSE. Obecně se ale každý cyklus hodí pro řešení jiných problémů.
U cyklů je důležité správně stanovit podmínku, jinak se cyklus může zacyklit
a opakovat se do nekonečna. Příkaz break; slouží k předčasnému ukončení
cyklu. Příkaz continue; přeruší vykonávání aktuálního průchodu tělem cyklu
a začne nový průchod.
15 10. Funkce
Pokud budeme chtít nějakou část kódu někam uložit a posléze jen volat z
různých částí programu, slouží k tomu funkce. Funkce mají tu výhodu, že je
lze opakovaně volat s jinými parametry. Například můžeme mít funkci na
vypočítání objemu nebo obsahu trojúhelníku o stranách a, b a c. V PHP
definujeme funkce příkazem function, funkci pak předáváme jednotlivé
parametry v kulatých závorkách (oddělené čárkou), tělo funkce píšeme do
složených závorek a návratovou hodnotu vrátíme příkazem return:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
function obvod_trojuhelniku($a, $b, $c) {
return ($a + $b + $c);
}
function sestavitelnost_trojuhelniku($a, $b, $c) {
if (($a+$b > $c) && ($a+$c > $b) && ($b+$c > $a)) {
return TRUE;
}
else {
return FALSE;
}
}
$x =
$y =
$z =
echo
22;
33;
42;
"Trojuhelnik o stranach $y, $y a $z ";
if (sestavitelnost_trojuhelniku($x, $y, $z) == TRUE) {
echo "LZE sestavit.\nJeho obvod by byl: ";
echo obvod_trojuhelniku($x, $y, $z)."\n";
} else {
echo "NELZE sestavit.\n"
}
?>
První deklarujeme dvě funkce, jednu na výpočet obvodu trojúhelníku (sečtení
všech tří předaných argumentů - stran) a druhou na zjištění zda lze sestrojit
trojúhelník, známe-li všechny tři strany. (vrací TRUE pokud lze sestavit,
FALSE pokud nelze). Vypíše se:
Trojuhelnik o stranach 22, 33 a 42 LZE sestavit.
Jeho obvod by byl: 97
Příkaz return okamžitě ukončí činnost funkce, tedy kdyby za ním v těle byly
libovolné příkazy, budou ignorovány. Funkce ale můžou být jak bez
parametrů (argumentů), tak bez návratové hodnoty (nevrací nic, může ale
například něco vypsat atd.).
16 
Download

Základy PHP