|
2.1 Předčasné ukončení skriptu
2.1.1 Exit
Syntaxe:
Exit()
Ukončí vykonávání skriptu.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
echo 'první řádek<BR>';
echo 'druhý řádek<BR>';
exit();
echo 'třetí řádek<BR>';
?>
</BODY>
</HTML>
2.1.2 Die
Syntaxe:
Die(zpráva - řetězec)
Ukončí vykonávání skriptu, ale narozdíl od příkazu Exit odešle po ukončení skriptu "zprávu" na výstup.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
echo 'první řádek<BR>';
echo 'druhý řádek<BR>';
die('<B>Zde byl skript ukončen</B>');
echo 'třetí řádek<BR>';
?>
</BODY>
</HTML>
Nastavení zobrazování chybových hlášení
V php.ini příkazem error_reporting = E_ALL; zapneme zobrazování všech chybových hlášení a varování.
Programově v PHP kódu lze přenastavit po dobu běhu skriptu tuto direktivu příkazem ini_set('error_reporting',E_ALL);
E_STRICT je nejpřísnější nastavení zobrazování chybových hlášení, vhodné pro zajištění přenositelnosti.
2.2 Zjišťování datového typu
2.2.1 Gettype
Syntaxe:
Gettype(proměnná)
Vrací datový typ proměnné ve formě řetězce.
Návratové hodnoty
- boolean
- integer
- double (= float)
- string
- array
- object
- resource
- null
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
$a=true;
$b=10;
$c=1.22;
$d='řetězec';
$e=array('jedna','dvě','tři');
$f=(object) 'řetězec jako objekt';
$g=null;
$h=fopen($_SERVER["SCRIPT_FILENAME"],"r");
echo '$a: ',gettype($a),'<BR>','$b: ',gettype($b),'<BR>','$c: ',gettype($c),'<BR>','$d: ',gettype($d),'<BR>','$e: ',gettype($e),'<BR>','$f: ',gettype($f),'<BR>','$g: ',gettype($g),'<BR>','$h: ',gettype($h),'<BR>';
?>
</BODY>
</HTML>
Výpis v prohlížeči
$a: boolean
$b: integer
$c: double
$d: string
$e: array
$f: object
$g: NULL
$h: resource
2.2.2 Var_dump
Syntaxe:
var_dump(výraz [, výraz2, …])
Vrátí informace o proměnné - datový typ, její hodnotu atd.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
$a=true;
$b=10;
$c=1.22;
$d='řetězec';
$e=array('jedna','dvě','tři');
$f=(object) 'řetězec jako objekt';
$g=null;
echo '$a: ',var_dump($a),'<BR>','$b: ',var_dump($b),'<BR>','$c: ',var_dump($c),'<BR>','$d: ',var_dump($d),'<BR>','$e: ',var_dump($e),'<BR>','$f: ',var_dump($f),'<BR>','$g: ',var_dump($g),'<BR>';
?>
</BODY>
</HTML>
Výpis v prohlížeči
$a: bool(true)
$b: int(10)
$c: float(1.22)
$d: string(7) "řetězec"
$e: array(3) { [0]=> string(5) "jedna" [1]=> string(3) "dvě" [2]=> string(3) "tři" }
$f: object(stdClass)#1 (1) { ["scalar"]=> string(19) "řetězec jako objekt" }
$g: NULL
2.3 Datové typy
2.3.1 Boolean
Jedná se o skalární datový typ, který může obsahovat jen jednu hodnotu. Nabývá jedné ze dvou hodnot - TRUE nebo FALSE.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
$a=true; //do proměnné $a je přiřazena hodnota true
$b=false; //do proměnné $b je přiřazena hodnota false
echo '$a:',var_dump($a),'<BR>$b:',var_dump($b),'<BR>';
?>
</BODY>
</HTML>
2.3.2 Integer
Integer je datový typ, který vyjadřuje pouze celá čísla. Mohou to být čísla z dekadické, oktalové a hexadecimální soustavy.
Tento datový typ je skalární, obsahuje jednu hodnotu.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
$a=12345; //do proměnné $a je přiřazeno číslo v desítkové soustavě
$b=0123; //do proměnné $b je přiřazeno číslo v osmičkové soustavě (0 na začátku), 83 v desítkové soustavě
$c=0x1AB; //do proměnné $c je přiřazeno číslo v šestnáctkové soustavě (0x na začátku), 427 v desítkové soustavě
$d=-2456; //do proměnné $d je přiřazeno záporné číslo v desítkové soustavě
$e=-0123; //do proměnné $e je přiřazeno záporné číslo v osmičkové soustavě, -83 v desítkové soustavě
$f=-0x1AB; //do proměnné $f je přiřazeno záporné číslo v šestnáctkové soustavě, -427 v desítkové soustavě
echo '$a:',var_dump($a),'<BR>$b:',var_dump($b),'<BR>$c:',var_dump($c),'<BR>';
echo '$d:',var_dump($d),'<BR>$e:',var_dump($e),'<BR>$f:',var_dump($f),'<BR>';
?>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
$a=12345999999111192; //do $a je přiřazeno vysoké číslo, bude převedeno na float
$b=2147483647; //do $b je přiřazeno vysoké číslo, ale ještě nebude převedeno na float
$c=2147483648; //do $c je přiřazeno vysoké číslo, bude převedeno na float
echo '$a:',var_dump($a);
echo '<BR>$b:',var_dump($b);
echo '<BR>$c:',var_dump($c);
?>
</BODY>
</HTML>
Pokud je převýšena hranice pro datový integer (může se lišit podle operačního systému, zde (±231 1), změní se automaticky datový typ na float).
2.3.3 Float
Tento datový typ se používá pro čísla s plovoucí desetinnou čárkou. Velikost a přesnost závisí na operačním systému a konfiguraci PHP (v php.ini parametr precision), přesnost závisí také na velikosti čísla.
Tento datový typ je skalární, obsahuje jednu hodnotu.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
$a=1.23456789999; //do $a je přiřazeno číslo, kde počet číslic je roven parametru precision (12), v prohlížeči se zobrazí stejně
$b=10.23456789999; //do $b je přiřazeno číslo, kde počet číslic je o 1 více než hodnota parametru precision (13), v prohlížeči se zobrazí zaokrouhleně
$c=99999.99999999; //číslo bude v prohlížeči zobrazeno 1.0E+5
$d=12.2e3; //číslo lze zadat ve formátu e3, e+3, E3, E+3
$e=13.1e-3; //číslo lze zadat ve formátu e-3, E-3
echo '$a:',var_dump($a);
echo '<BR>$b:',var_dump($b);
echo '<BR>$c:',var_dump($c);
echo '<BR>$d:',var_dump($d);
echo '<BR>$e:',var_dump($e);
?>
</BODY>
</HTML>
2.3.4 String (řetězec)
Řetězec je posloupnost znaků, se kterou se zachází jako s celkem, který je uzavřen v apostrofech nebo v uvozovkách.
Tento datový typ je skalární, obsahuje jednu hodnotu.
Řetězec uzavřený v apostrofech nebo uvozovkách se řídí stejnými pravidly, jaká byla popsána u příkazu echo.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
$a='123'; //do $a je přiřazen řetězec znaků 123
$b='abc';
$c='$"\2354'; //pozor na kombinaci \' - interpretuje se jako apostrof
echo '$a:',var_dump($a);
echo '<BR>$b:',var_dump($b);
echo '<BR>$c:',var_dump($c);
?>
</BODY>
</HTML>
2.3.5 Array (pole)
Pole je složený datový typ, proměnná tohoto datového typu může obsahovat více prvků.
Je to datová struktura, která je definována jako indexovaný soubor dat.
Každá položka pole se skládá ze dvou hodnot a to klíč (key) a hodnota (value).
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
$zaci[0]='Adam'; //do pole $zaci jsou přiřazena jména, klíč je číslo, je to číselně indexované pole
$zaci[1]='Barbora';
$zaci[2]='Cyril';
$zaci[3]='Dana';
$zaci[7]='Filip';
echo 'pole $zaci: ',var_dump($zaci),'<BR>';
foreach($zaci as $k=>$v){
echo "klíč = $k => hodnota: $v<BR>";
}
echo '<br>';
$ucitel['hr']='Horáková'; //do pole $ucitel jsou přiřazena jména, klíč je řetězec,
$ucitel['sá']='Scharnaglová'; //je to pole s asociativním indexem
$ucitel['hs']='Honsa';
$ucitel['bi']='Binderová';
echo 'pole $ucitel: ',var_dump($ucitel),'<BR>';
foreach($ucitel as $k=>$v){
echo "klíč = $k => hodnota: $v<BR>";
}
?>
</BODY>
</HTML>
Podrobněji bude problematika polí rozebrána v samostatné kapitole.
2.3.6 Object
Je to složený datový typ, který se využívá v objektově orientovaném programování (OOP).
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
class ucebna{
var $pocet_zidli;
var $pocet_stolu;
function zadat_pocet_zidli($pocet){
$this->pocet_zidli=$pocet;
}
function zadat_pocet_stolu($pocet){
$this->pocet_stolu=$pocet;
}
function spocitat_nabytek(){
return $this->pocet_zidli+$this->pocet_stolu;
}
}
$ucebna1=new ucebna;
var_dump($ucebna1);
$ucebna1->zadat_pocet_zidli(25);
$ucebna1->zadat_pocet_stolu(13);
echo '<BR><BR>';
var_dump($ucebna1);
echo '<BR><BR>';
echo '$ucebna1 je typu ',gettype($ucebna1);
echo '<BR><BR>';
echo 'Celkový počet nábytku: ',$ucebna1->spocitat_nabytek();
?>
</BODY>
</HTML>
Objektové programování nebude součástí těchto skript, proto dále nebudeme podrobně rozebírat problematiku objektů. V případě vašeho zájmu se můžete této rozsáhlé problematice samostatně věnovat.
2.3.7 Resource
Datový typ Resource se využívá jako spojení s externím zdrojem dat, jako jsou například databáze nebo soubory.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
//otevření tohoto souboru pro čtení
$soubor=fopen($_SERVER["SCRIPT_FILENAME"],"r");
echo gettype($soubor);
?>
</BODY>
</HTML>
Proměnné typu resource neobsahují hodnotu, ale obsahují ukazatel na zdroj dat.
2.3.8 Null
Null je speciální hodnota, která vyjadřuje, že proměnná nebyla nastavena na žádnou předdefinovanou hodnotu nebo jí byla přiřazena konkrétní hodnota Null, případně byla odstraněna pomocí funkce Unset.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
echo @gettype($a),'<BR>';
$a=1;
echo gettype($a),'<BR>';
unset($a);
echo @gettype($a),'<BR>';
?>
</BODY>
</HTML>
2.3.9 Přetypování
Přetypování je donucení proměnné, aby se dočasně chovala jako zvolený datový typ.
Docílí se toho tím, že před proměnnou napíšeme do závorky požadovaný datový typ - viz následující seznam.
- (bool), (boolean) - převod na boolean
- (int), (integer) - převod na celé číslo
- (float), (double), (real) - převod na číslo s plovoucí des. čárkou
- (string) - převod na řetězec
- (array) - převod na pole
- (object) - převod na objekt
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
$a=25;
$b=(float) $a;
echo '$a=',$a,', datový typ: ', gettype($a),'<BR>';
echo '$b=',$b,', datový typ: ', gettype($b),'<BR>';
$c=25.5;
$d=(integer) $c;
echo '$c=',$c,', datový typ: ', gettype($c),'<BR>';
echo '$d=',$d,', datový typ: ', gettype($d),'<BR>';
$e=25.5;
$f=(string) $e;
echo '$e=',$e,', datový typ: ', gettype($e),'<BR>';
echo '$f=',$f,', datový typ: ', gettype($f),'<BR>';
$g='12.2retezec25aaa';
$h=(integer) $g;
echo '$g=',$g,', datový typ: ', gettype($g),'<BR>';
echo '$h=',$h,', datový typ: ', gettype($h),'<BR>';
$i='12.2retezec25aaa';
$j=(float) $i;
echo '$i=',$i,', datový typ: ', gettype($i),'<BR>';
echo '$j=',$j,', datový typ: ', gettype($j),'<BR>';
$k='retezec';
$l=(boolean) $k;
echo '$k=',$k,', datový typ: ', gettype($k),'<BR>';
echo '$l=',$l,', datový typ: ', gettype($l),'<BR>';
?>
</BODY>
</HTML>
2.3.10 Settype
Syntaxe:
Settype(proměnná,typ)
Tato funkce převede proměnnou na zvolený datový typ a vrátí True, pokud se převod zdařil, jinak vrátí False. Může převádět na následující typy:
- boolean
- integer
- float
- string
- array
- object
- null
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
$a=25;
echo '$a=',$a,', datový typ: ',gettype($a),'<BR>';
var_dump($a);
echo '<BR>';
settype($a,"string");
echo '$a=',$a,', datový typ: ',gettype($a),'<BR>';
var_dump($a);
?>
</BODY>
</HTML>
2.3.11 Funkce pro ověření zvoleného datového typu proměnné
Potřebujeme-li zjistit, zda je proměnná konkrétního typu, použijeme některou z následujících funkcí:
- is_array(proměnná)
- is_bool(proměnná)
- is_float(proměnná)
- is_integer(proměnná)
- is_null(proměnná)
- is_string(proměnná)
- is_numeric(proměnná) - zjišťuje, zda je proměnná číselná
- is_object(proměnná)
- is_resource(proměnná)
- is_scalar(proměnná) - zjišťuje, zda je proměnná
Tyto funkce navracejí hodnotu True, pokud je proměnná daného typu, jinak vrací False.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
$a=25;
echo 'Proměnná $a je typu integer: ',is_integer($a);
?>
</BODY>
</HTML>
2.4 Identifikátory
Identifikátor je obecný výraz pro názvy proměnných, funkcí, objektů atd. Identifikátor se může skládat z jednoho a více znaků, začíná písmenem nebo podtržítkem (_), první znak nesmí být číslo, následuje libovolný počet písmen, číslic, podtržítek a znaků s ascii hodnotami od 127 - 255. Diakritika je tímto povolena, nicméně nedoporučuje se, což je obecné pravidlo.
V identifikátorech se rozlišuje velikost písmen. Například $reditel je jiný identifátor než $Reditel.
Délka identifikátoru je libovolná (1 a více znaků) a identifikátor se nesmí shodovat s žádným klíčovým slovem PHP.
Neplatné názvy identifikátorů - příklady:
2.5 Proměnné
Proměnná je pojmenované místo v paměti, které obsahuje data, s kterými se dá manipulovat během vykonávání programu.
Proměnné jsou reprezentovány v PHP znakem dolar $ a následným názvem proměnné.
Názvy se řídí pravidly platnými pro identifikátory.
2.5.1 Deklarace
V PHP se proměnné nemusí explicitně deklarovat, jako například v jiných programovacích jazycích. Proměnná se deklaruje současně s přiřazením své hodnoty.
2.5.1.1 Přiřazení hodnotou
Je to nejběžnější způsob přiřazování a znamená, že hodnota na pravé straně výrazu se zkopíruje do proměnné na levé straně. Každá proměnná má svou vlastní nezávislou hodnotu.
$a=10;
$b='retezec';
$c=10+15; //v proměnné $c bude 25
$d=$c; //v proměnné $c a $d bude 25
$c=20; //v proměnné $c bude 20, v proměnné $d zůstane 25
2.5.1.2 Přiřazení odkazem
Tento způsob přiřazování způsobuje, že na jednu hodnotu může ukazovat více proměnných, přičemž změna hodnoty v jakékoliv z těchto proměnných způsobí změnu hodnoty i v ostatních proměnných (hodnota je pro ně společná).
$c=10+15; //v proměnné $c bude 25
$d=& $c; //v proměnné $c a $d bude 25
$c=20; //v proměnné $c i $d bude 20
2.5.2 Oblast platnosti proměnné
Proměnnou můžeme deklarovat na jakémkoliv místě v PHP skriptu, ale zároveň tímto umístěním určujeme oblast její platnosti.
Proměnné mohou mít čtyři oblasti platnosti.
- lokální proměnné
- statické proměnné
- parametry funkcí
- globální proměnné
2.5.2.1 Lokální proměnné
Za lokální proměnnou se považuje ta, která je deklarována uvnitř funkce a která je přístupná pouze v této funkci.
Po ukončení této funkce jsou všechny lokální proměnné vymazány.
Lokální proměnná (uvnitř funkce) neovlivňuje proměnné se stejným názvem vně této funkce.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
function test(){
echo $a'; //zavolaná funkce vypíše hodnotu $a, která není definovaná, proto zobrazí chybu
$a=10; //$a se nastaví na hodnotu 10
echo $a,'<BR>'; //vypíše se hodnota 10
}
$a=20;
echo $a; //tímto příkazem vypíšeme 20
test(); //zavoláme funkci test()
echo $a,'<BR>'; //po návratu z funkce už hodnoty nastavené ve funkci neplatí, vypíše se 20
?>
</BODY>
</HTML>
2.5.2.2 Statické proměnné
Statické proměnné se deklarují uvnitř funkcí (mají lokální platnost pro danou funkci a je přístupná pouze v ní) a jejich vlastností, narozdíl od lokálních proměnných, je to, že po ukončení funkce tyto proměnné neztrácejí svou hodnotu, a tato hodnota je stále platná i při dalším zavolání této funkce. Mimo funkci se hodnota proměnné neuplatňuje.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
function test(){
//statická deklarace proměnné $a, nastavení na 100 platí při prvním zavolání funkce
static $a=100;
$a+=3; //hodnota $a se zvýší o 3
echo '$a ve funkci = ',$a,'<BR>'; //vypíše se hodnota zvýšená o 3
}
$a=20; //$a se nastaví na 20
echo '$a mimo funkci = ',$a,'<BR>'; //tímto příkazem vypíšeme 20
test(); //zavoláme funkci test() poprvé
test(); //zavoláme funkci test() podruhé
test(); //zavoláme funkci test() potřetí
echo '$a po návratu z funkce = ',$a,'<BR>';
//po návratu z funkce platí stále původní hodnota 20
?>
</BODY>
</HTML>
2.5.2.3 Parametry funkcí
Parametry funkcí se deklarují v závorce za názvem funkce, mají vlastnosti lokální proměnné a jejich hodnota je stanovena při volání funkce jako argumenty. Toto se týká pouze parametrů předávaných hodnotou.
Další podrobné informace o předávání hodnot funkcí budou podány později.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
//hodnoty proměnných $a, $b se nastaví jako argumenty volání funkce secti()
//mají platnost pouze uvnitř této funkce
function secti($a,$b){
echo $a,' + ',$b,' = ',$a+$b,'<BR>';
}
secti(20,150);
echo '$a = ',$a,'<BR>'; //$a není v této oblasti definovaná
echo '$b = ',$b,'<BR>'; //$b není v této oblasti definovaná
?>
</BODY>
</HTML>
2.5.2.4 Globální proměnné
Globální proměnná narozdíl od lokální proměnné má platnost a je přístupná v kterékoliv části programu. Pokud chceme použít proměnnou, která je vně funkce, musíme tuto proměnnou v této funkci deklarovat jako globální.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
function test(){
global $a;
echo '$a = ',$a, ' - výpis uvnitř funkce<BR>';
$a+=20; //$a zvýšíme o 20
echo '$a = ',$a, ' - výpis uvnitř funkce po zvýšení o 20<BR>';
}
$a=100;
echo '$a = ',$a, ' - první výpis vně funkce<BR>';
test();
echo '$a = ',$a, ' - výpis po skončení funkce<BR>';
?>
</BODY>
</HTML>
Domácí úkol
Analyzujte následující kód, udělejte si potřebné výpisy a napište, jakých hodnot jednotlivé proměnné nabývají během běhu programu při průchodu jednotlivými funkcemi a na konci skriptu (místa jsou označena komentářem v kódu). Zdůvodněte tyto jednotlivé hodnoty.
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
ini_set('error_reporting',E_ALL);
function prvni(){
$a=5;
//tady napište, jakou má hodnotu proměnná $a, $b, $c, $d, $e
}
function druha(){
static $b=150;
$b+=3;
$c=5;
//tady napište, jakou má hodnotu proměnná $a, $b, $c, $d, $e
}
function treti($b,$c){
$d=$b*$c;
$a=2;
//tady napište, jakou má hodnotu proměnná $a, $b, $c, $d, $e
}
function ctvrta(){
global $e;
$e=$e+2+$e*$e;
//tady napište, jakou má hodnotu proměnná $a, $b, $c, $d, $e
}
$a=15;
prvni();
$b=20;
druha();
treti(2,3);
$e=$a;
ctvrta();
ini_set('error_reporting',E_ALL & ~E_NOTICE);
//tady napište, jakou má hodnotu proměnná $a, $b, $c, $d, $e
?>
</BODY>
</HTML>
Shrnutí
- umíte předčasně ukončit běh skriptu pomocí funkcí Die a Exit
- umíte zjistit datový typ a hodnotu proměnné
- znáte základní datové typy proměnných
- umíte měnit datový typ proměnné
- znáte pravidla pro tvorbu proměnných a jejich deklaraci
- znáte oblasti platnosti proměnných
|