Všetky premenné v jazyku PHP začínajú symbolom dolára ($). Podľa toho server pozná, že ide o premennú a tak s ňou bude tiež narábať. Za týmto symbolom môže nasledovať len písmeno alebo podtrhovník. Potom už môže nasledovať číslica, písmeno alebo podtrhovník. Veľkým zjednodušením jazyka PHP je to, že sa premenné nemusia explicitne deklarovať. To znamená, že odpadá záhlavie s deklarovanými premennými. Takže kdekoľvek na PHP stránke sa nám zachce vložiť novú premennú, môžeme to urobiť napr. podľa nasledujúcej syntaxe
$meno = "Martin"; $meno_priezvisko = "Martin Kukan"; $_meno = "Martin";
V php rozlišujeme tieto typy premenných:
- znakový reťazec (string)
- celé číslo (integer)
- desatinné číslo (double)
- pole (array)
- objekt (object)
- booleovský typ (boolean – true, false)
- premenná bez hodnoty – prázdna (NULL)
- globálne premenné – podporované od verzie php 4
Typ premennej sa určí na základe jej hodnoty v okamžiku priradenia. V prípade potreby je možné typ premennej zmeniť tzv. pretypovaním premennej.
1. Znakové reťazce
Môžeme ich písať do dvojitých alebo jednoduchých úvodzoviek. Dvojité úvodzovky nám však umožňujú nahradenie premenných napríklad v príkaze echo (výpis na obrazovku), avšak text v jednoduchých úvodzovkách bude zobrazený, tak ako je tam napísaný. To znamená, že server nenahradí premenné ani escape sekvencie. Môžeme si to skúsiť na názornom príklade:
Príklad:
$meno = "Peter"; echo "Ahoj $meno \n"; echo 'Ahoj $meno \n';
Výsledok príkladu:
Ahoj Peter
Ahoj $meno \n
Pokiaľ chceme do dvojitých úvodzoviek napísať napr. spätné lomítko alebo úvodzovky, tak by to nešlo, pretože by si server myslel, že to má „urobiť“. Preto boli vytvorené tzv. Escape sekvencie (sú to znaky, ktoré server prevedie na potrebné znaky). Súhrn niektorých sekvencií:
\“ úvodzovky
\\ spätné lomítko
\n začiatok nového riadku
\t tabelátor
\r návrat na začiatok riadku
\$ symbol doláru
Príklad:
$meno = "Peter"; echo "Ahoj \"$meno\" \$meno\\ \n";
Výsledok príkladu:
Ahoj „Peter“ $meno\
Spájanie reťazcov sa robí pomocou bodky:
Príklad:
<?php echo "Tvoje meno je $meno <br />"; echo "Dvanásť delené osem = ".(12/8)."<br />"; $var = "Dobrý deň "; $var .= "pane"; echo $var; ?>
Výsledok príkladu:
Tvoje meno je Peter
Dvanásť delené osem = 1.5
Dobrý deň pane
V prvom prípade sa žiadne spojenie nemuselo použiť, pretože vďaka dvojitým úvodzovkám server vie, že tam má doplniť premennú $meno. V druhom prípade sa spojili reťazec s výsledkom delenia pomocou bodky. Tretí prípad ukazuje ako sa dajú ľahko spojiť dva reťazce v priebehu dokumentu pomocou operátora .=.
Príklad:
<?php
echo ("4" . "5");
echo ("4"."5");
echo (4 . 5);
echo (4.5);
?>
Výsledok príkladu:
45
45
45
4.5
2. Celé čísla
Rozsah celých čísiel odpovedá dátovému typu long jazyka C. Na 32 bitových platformách môže byť teda v rozsahu -2149483648 až + 2147483647. Pokiaľ dôjde k prekročeniu tohto intervalu, tak PHP dokáže automaticky konvergovať číslo na reálny typ. Čísla môžu byť zapisované ako desiatkové, šestnástkové alebo osmičkové.
Príklad:
$desiatkove = 16; $sestnastkove = 0x10; $osmickove = 020; echo "16 v desiatkovej sústave = $desiatkove<br />"; echo "0x10 v desiatkovej sústave = $sestnastkove<br />"; echo "020 v desiatkovej sústave = $osmickove";
Výsledok príkladu:
16 v desiatkovej sústave = 16
0x10 v desiatkovej sústave = 16
020 v desiatkovej sústave = 16
3. Reálne čísla
Jedná sa o desatinné čísla. Rozsah odpovedá typu double z jazyka C a môže teda nadobúdať hodnoty v rozsahu od 1.7E-308 až 1.7E308. Desatinné čísla môžeme zapisovať buď klasicky – napr. 0.00015 alebo exponenciálne – napr. 1.5E-4. PHP navyše dokáže pracovať so skupinou funkcií, ktorá nám umožňuje riadiť si presnosť výpočtu. Ide o tzv. Binárny kalkulátor (BC). Pokiaľ chceme pracovať s veľkou presnosťou, doporučujeme použiť tieto funkcie.
Príklad:
$klasicky_zapis = 0.00015; $matematicky_zapis = 1.5E-4; echo "klasický zápis: ".$klasicky_zapis; echo "matematický zápis: ".$matematicky_zapis;
Výsledok príkladu:
klasický zápis: 0.00015
matematický zápis: 0.00015
4. Pole, asociatívne pole
Polia sú trochu odlišné od premenných. Ich základná odlišnosť spočíva v tom, že v premenných môže byť len jedna hodnota a v poliach môže byť rad hodnôt. V poliach sa môžu taktiež nachádzať premenné, čísla a aj iné polia (viacrozmerné polia). Polia delíme na indexové a asociatívne.
PHP narozdiel od iných programovacích jazykov nekladie tak prísne požiadavky na indexy poľa. Táto syntaktická benevolencia umožňuje používať za indexy poľa ľubovoľné čísla a znakové reťazce. Obvykle sa prvky poľa indexujú pomocou číselného radu počínajúc nulou. Následujúce časti kódu názorne ukazujú rôzne možnosti zápisu priradenia hodnôt do premenných poľa.
$x[] = 10; $x[] = 20; $x[] = 30; $x[] = 55; $x[0] = 10; $x[1] = 20; $x[2] = 30; $x[3] = 55; $x = Array(10, 20, 30, 40);
Vo všetkých troch príkladoch je výsledkom rovnako inicializované pole $x.
PHP pozná aj asociatívne pole, ktorého indexom (kľúčom) môže byť ľubovoľný znakový reťazec. Prostredníctvom asociatívneho poľa môžeme napr. „poslovenčiť“ príkaz Date.
$den["Mon"] = "Pondelok"; $den["Tue"] = "Utorok"; $den["Wed"] = "Streda"; $den["Thu"] = "Štvrtok"; $den["Fri"] = "Piatok"; $den["Sat"] = "Sobota"; $den["Sun"] = "Nedeľa";
$den = Array("Mon" => "Pondelok",
"Tue" => "Utorok",
"Wed" => "Streda",
"Thu" => "Štvrtok",
"Fri" => "Piatok",
"Sat" => "Sobota",
"Sun" => "Nedeľa");
Nasledujúci príkaz už nevypíše anglickú skratku dňa v týždni, ale jej slovenský ekvivalent.
Príklad:
Dnes je <?php echo $den[Date("D")]; ?>, to je ale pekný deň.
Výsledok príkladu:
Dnes je Štvrtok, to je ale pekný deň.
5. Booleovské premenné
Každá premenná má zároveň priradenú booleovskú hodnotu (true alebo false). Táto hodnota sa používa napríklad pri príkaze if alebo for. Booleovská hodnota sa riadi týmito pravidlami:
- pri celých a reálnych číslach: ak je hodnota nula = false, inak vždy true
- pri reťazci: ak je prázdny znak = false, inak vždy true
- pole: ak je pole prázdne = false, inak vždy true
6. Konštanty
Premenné uchovávajú svoju hodnotu dočasne, ale konštanty si ju udržiavajú počas procesu celého skriptu. Hodnota konštanty je nezmeniteľná. Základná syntax je v celku jednoduchá rovnako ako bolo u premenných. Zapisuje sa ako define(). Hodnota sa teraz ale nepriraďuje pomocou „=„, ale iba pomocou takéhoto zápisu:
Príklad:
define("ZAKLAD","konštanta");
echo "Toto je ".ZAKLAD.".";
Výsledok príkladu:
Toto je konštanta.
Konštanty sa dajú použiť napr, pri práci s jazykovou mutáciou stránky. Je len na vás ako ich využijete.
Preddeklarované konštanty
Php obsahuje niektoré preddeklarované konštanty. TRUE (pravda) a FALSE (nepravda) sú preddefinované s hodnotami 1 pre TRUE a 0 alebo prázdny reťazec pre FALSE. Konštanta PHP_VERSION indikuje používanú verziu PHP. Konštanta PHP_OS indikuje operačný systém servera.
Príklad:
echo PHP_VERSION; echo PHP_OS;
Výsledok príkladu:
5.3.18 Linux
__FILE__ a __LINE__ obsahujú názov spracovávaného skriptu a aktuálne číslo riadku skriptu.
Príklad:
echo __FILE__; echo __LINE__;
Výsledok príkladu:
/nfs1/cirka/vyuka/php/kap3.php
447
PHP tiež zahrňuje konštanty pre hlásenie chýb:
Príklad:
echo E_ERROR; echo E_WARNING; echo E_PARSE; echo E_NOTICE;
Výsledok príkladu:
1
2
4
8
7. Rozsah platnosti premenných
Ak je premenná deklarovaná v hlavnej časti kódu (nie vo funkcii alebo triede), potom má globálnu platnosť. To znamená, že jej hodnota platí pre celý dokument. Premenná deklarovaná vo funkcii alebo triede platí iba na tejto „časti“. Aby platila v celom dokumente je treba ju deklarovať pomocou slova global v danej funkcii. Ako alternatívny mechanizmus sa tiež môže použiť premenná $GLOBALS[„nazov“].
Príklad:
<?php
function suma($a,$b)
{
global $c; // alebo $GLOBALS["c"] = 15;
$c = $a+$b;
$d = $c;
}
$a = 5;
$b = 8;
echo suma($a,$b);
echo "Zadané čísla sú $a a $b. Ich súčet je $c <br />";
echo "Premenná d bola definovana vo vnútri funkcie,
preto mimo funkcie má hodnotu: $d";
?>
Výsledok príkladu:
Zadané čísla sú 5 a 8. Ich súčet je 13
Premenná d bola definovana vo vnútri funkcie,
preto mimo funkcie má hodnotu:
Tento príklad ukazuje ako sa s globálnymi premennými pracuje. Pokiaľ budeme napríklad v nejakej funkcii deklarovať novú premennú a chceme ju neskôr použiť v inej funkcii, musíme ju deklarovať ako globálnu. Keby sme ju tak nedeklarovali, tak v inej funkcii už premenná (premenná $d v predchádzajúcom príklade) nebude existovať s platnou hodnotou.
8. Dynamické premenné
PHP podporuje dynamické premenné. Pri dynamických premenných je dynamický názov premennej. V praxi sa používajú málo
Príklad:
<?php $_pole = "ProduktID"; $$_pole = "432BB"; echo $ProduktID."\n"; echo $$_pole; ?>
Prvý riadok kódu vytvára reťazcovú premennú s názvom $_pole a priraduje jej hodnotu ProduktID. Druhý riadok používa hodnotu prvej premennej pre vytvorenie názvu druhej premennej.
Výsledok príkladu:
432BB
432BB
9. Konverzia reťazcov a automatické pretypovanie
V PHP nie je nutné uvádzať o aký dátový typ premennej sa jedná. Pri prvom použití je premenná priradená automaticky. Premenné možno pretypovať v štyle jakyka C. Prehľad operátorov na pretypovanie:
| Operátor | Opis |
| pretypovanie na celé číslo | (int), (integer) |
| pretypovanie na reálné číslo | (real), (double), (float) |
| pretypovanie na reťazec | (string) |
| pretypovanie na pole | (array) |
Pokiaľ vykonávame číselné operácie s reťazcom, PHP vyhodnotí reťazec ako číslo. To sa nazýva konverzia reťazca, aj keď sa obsah premennej obsahujúcej reťazec nemusí nutne zmeniť.
Príklad:
$str = "81237 Bratislava"; $x = 3 + $str; echo $x; echo $str;
Výsledok príkladu:
81240
81237 Bratislava
Reťazec $str je pre potreby výpočtu vyhodnotený ako celé číslo 81237, ale premenná $str zostáva nezmenená.
Konverzia sa riadi podľa nasledujúcich pravidiel:
- Ako číslo je vyhodnotený iba začiatok reťazca. Reťazec začínajúci iným znakom ako číslo je vyhodnotený ako 0.
- „3rd degree“ » 3
- „degree 3rd“ » 0
- „-3.4“ » -3.4
- „4.2 degree“ » 4
- Reťazec je vyhodnotený ako desatinné číslo iba v prípade, že desatinná hodnota zaberá celý reťazec, inak je vyhodnotený ako celé číslo.
Okrem konverzie reťazcov PHP vykonáva aj pretypovanie medzi dvoma numerickými typmi.
Príklad:
$a = 1; $b = 1.1; $c = $a + $b; $d = $c + "6th"; echo $c; echo $d;
Výsledok príkladu:
2.1
8.1
Príklad: explicitné pretypovanie
echo $a = 11.2; echo $b = (int) $a; echo $c = (double) $a; echo $d = (string) $a;
Výsledok príkladu:
11.2
11
11.2
11.2
V PHP sa môžu tiež použiť nasledujúce funkcie, ktoré nám môžu pomôcť identifikovať typ premennej.
| Funkcia | Opis |
| gettype($premenna) | vypíše typ premennej |
| is_integer($premenna) | zisťuje či je premenná typu integer |
| is_double($premenna) | zisťuje či je premenná typu double |
| is_string($premenna) | zisťuje či je premenná typu reťazec |
| is_array($premenna) | zisťuje či je premenná typu pole |
| is_object($premenna) | zisťuje či je premenná typu objekt |
| settype($premenna,typ2) | zmení typ premennej na typ2 |
| count($pole) | zisťuje počet prvku v poli |
| reset($pole) | presunie ukazateľ na prvý index poľa |
| current($pole) | vypíše hodnotu aktuálneho prvku poľa |
| next($pole) | vypíše hodnotu nasledujícúho poľa |
| key($pole) | vypíše index aktuálneho prvku poľa |
| list($pole) | vloží do premenných prvky poľa |
