|
PHP skript je vlastne obyčajná WWW stránka
doplnená o špeciálne príkazy. Aby server vedel, že môže dôjsť k takejto
situácii a nebude mať do činenia len s obyčajnou WWW stránkou,
používajú sa odlišné prípony. Klasická WWW stránka má príponu .html
alebo .htm, stránka v jazyku PHP by mala mať príponu .php alebo .phtml.
Záleží to od nastavenia Vášho WWW servera. V nasledujúcej tabuľke nájdete
všeobecné odporučenie pre prípony, pri používaní PHP. Nie je to fixne dané,
je to len nepísané pravidlo, čo znamená, že vy môžete svoje súbory označovať
úplne inak. Ja som si zvykol používať príponu .php, takže ju budem používať
aj ďalej v texte. Namiesto prípony .inc
používajte .php.
Možno sa
čudujete prečo, ale je to kvôli bezpečnosti. Ak to nie je
špecificky nastavené,
WWW server by po zadaní URL adresy knižnice (napr http://localhost/moja_kniznica.inc
odošle prehliadaču kompletný
zdrojový kód Vašej knižnice. A to určite nechcete, však?
Dosť bolo
asi teórie, prejdeme do praxe. Nikoho nenútim, aby príklady vypracovával,
ale ako sa hovorí prax robí majstra. Dôležitý je aj tzv. “aha
efekt”.
V editore
vytvoríme príklad k3_prikl1.php,
ktorý bude vyzerať asi takto
Čo sa vlastne udialo? Tým, že sme napísali
URL adresu 3_prikl1.php, odoslali sme WWW serveru, že chceme zobraziť tento súbor
/WWW stránku/. WWW server súbor načítal a zistil podľa prípony, že pôjde
o PHP skript. Preto hneď pri značke ‘<?’,
ktorá označuje začiatok PHP skriptu predal riadenie modulu PHP. Ten spracoval
ďalší riadok, ktorý tvorí funkcia PHPinfo(); a vygeneroval odpovedajúci
HTML kód, ktorý predal WWW serveru, aby ho odoslal nášmu prehliadaču. Po
spracovaní tagu ‘?>’
, ktorý označuje koniec skriptu predal riadenie WWW
serveru. Keďže WWW server zistil, že v súbore sa už nič viac nenachádza,
poslal kompletnú stránku nášmu prehliadaču a nám sa zjavila WWW stránka
s popisom PHP. Čo tam robí ten riadok “THIS IS XML2 NAD ME”. Len som si dovolil doplniť náš príklad o ďalší príkaz
PHP a to príkaz echo(“THIS IS.....ME”);
Dávajte pozor na úvodzovky, nakoľko
sa líši ich anglická a slovenská verzia (pod Windows), PHP chce anglickú
verziu. Pod OS UNIX je to (ako obvykle) bez problémov.
- <?
-
echo("THIS IS XML2 AND ME");
-
PHPInfo();
- ?>
Určite ste si všimli, že syntax veľmi
pripomína jazyk C. (Paskalisti teraz určite znechutene vstávajú
a nadávajú...). Výhoda je tá, že z C-čka PHP prebralo len tie
super veci, takže sa niet čoho báť. ( Optimisti, netešte sa, PHP4 alias
Zend bude ako druhé C++) Preto doporučujem investovať do kúpy knižky p.
Herouta: Jazyk C.
Tiež sa budem držať podobnej výukovej osnovy,
akú používa p. Herout, iba s tým, že pôjde o PHP.
3.1 Základy jazyka
PHP
Nakoľko PHP je program, je preto zložený
z určitej sekvencie príkazov. Pretože býva uložený v HTML
dokumente, treba WWW serveru jasne vymedziť, odkial ide o skript PHP
a kde náš skript končí. Na to slúžia znaky ‘ <?’
a ‘?>’.
Tieto znaky definuje norma SGML. Nasledujúce príklady sú ekvivalentné:
- <? echo("Hello World");
?>
- <?php
-
echo("Hello World with XML");
- ?>
-
- <SCRIPT LANGUAGE="php"
-
echo("Hello World now...");
- </SCRIPT>
Prvý príklad je jasne najjednoduchší.
Nestačí však, keď chceme použiť PHP na generovanie XML dokumentov. Vtedy
uprednostníme druhú verziu, pretože XML je vlastne SGML jazyk, ktorý umožňuje
používanie viacerých preprocesorov naraz a je preto nutné odlíšiť
ich od seba. Tretia verzia sa používa vtedy, ak chceme, aby náš WYSIWYG
editor chápal náš skript ako skript a neotravoval stále hláškami,
že tam máme nejaký neznámy kód. V PHP je možné používať aj
oddelovače ASP ‘<%’ a ‘%>’.
Používanie ASP tagov sa nastavuje v
konfiguračnom súbore php3.ini direktívou asp_tags = On. Oddeľovače ASP však
nepoužívajte, nakoľko neodpovedajú2 norme SGML Majú však opodstatnenie,
ak používate editor, ktorý podporuje len ASP skripty...
- <%
-
echo ("Hello");
- %>
-
- <%="Hello" %> // znak =
je skrátenou formou príkazu echo
V jazyku PHP sú
jednotlivé príkazy od seba oddelené bodkočiarkou, prípadne každý príkaz
je ohraničený znakmi <? a ?>
Tak ako v jazyku
C môžeme používať dva druhy komentárov. Pre poznámkuy a komentár po
koniec riadka použijeme znak ‘//’,
ktorý oznamuje, že za týmto má preprocesor všetko ignoro-vať až po
koniec riadku. Druhý druh komentárov môže zaberať aj viac riadkov
a označuje sa dvojicou znakov ‘/*’
a ‘*/’. Text uložený medzi
nimi sa považuje za komentár.Preprocesor PHP je podobne ako jazyk C citlivý
na velké a malé písmená v názvoch premenných, pre príkazy a funkcie je
jedno, aké písmená použijeme (podobne ako PASCAL). Premenné sa vždy začínajú
znakom dolár ‘$’ a môžu okrem písmen a číslic obsahovať aj
znak poddtrhovník, pričom sa nesmú začínať číslicou. Premennú nie je
nutné deklarovať, deklaruje sa automaticky. V prípade, že ju ani
neinicializujeme, obsahuje imlicitne prázdny reťazec (STRING NULL).
PHP má k dispozícii tri základné(integer,string,double)
a dva odvodené typy, medzi ktorými vykonáva automatickú typovú
konverziu.
Príklad
3
- <?php
- $premenna = "ahoj milan" ;
//teraz je tam string
- $premenna = 5.1313 ; //a teraz je
tam desatinne cislo
- /* teraz vypišeme hodnotu premennej
$premenna
-
na obrazovku */
- echo $premenna ;
- ?>
3.1.1
I N T E G E R
Typ Integer je v PHP reprezentovaný štyrmi
bajtmi. Čísla je možné zapisovať či už v desiatkovej, šestnástkovej(
prefix Ox ) alebo osmičkovej (prefox
0) sústave
Jeden z častých
omylov je uvedenie prefixu 0 pred číslo. Ak priradíme do premennej $a číslo
0335, mnohí sa veľmi čudujú, že na výstupe bude číslo 221, nakoľko číslo
0335 považuje PHP za číslo v oktetovej (osmičkovej) sústave.
3.1.2 S T R I N G
Reťazce v PHP zapisujeme pomocou úvodzoviek, čistý
text môžme aj pomocou apostrofov. Ak je nutné používať špeciálny znak vo
vnútri reťazca, je nutné použiť tzv. escape sekvencie. C-čkarom nie je
nutné vysvetlovať viac. Okrem escape sekvencií je možné používať aj ASCI
kód znaku. Escape sekvencie je možné používať iba v reťazcoch uzavretých
do úvodzoviek.
|
význam
|
znak
|
|
sp.
lomítko
|
\\
|
|
návrat
vozíka
|
\r
|
|
tabulátor
|
\t
|
|
úvodzovky
|
\"
|
|
dolár
|
\$
|
|
|
|
Ak chceme pristupovať
k jednotlivým znakom reťazca, pristupujeme k nim ako k prvkom poľa pomocou
zátvoriek. Toto pole je číslované od nuly.
Príklad 4
-
- <?php
$a = 10;
echo "V premennej \$a je hodnota $a <BR>" ;
echo ' A toto je cisty test <BR>';
$b = "Milan Gacik";
echo " $b[0] <BR>";
//vypise M $c = "\x41\0302"
echo " $c <BR>" ; // vypise AB
$x = 0Xff ; // o premenej uložime 255
$vysledok = $x + $a ;
echo "Vysledok je $vysledok <BR> "; //vypise 265
?>
3.1.3
D O U B L E
Typ double reprezentuje desatinné čísla, spravidla uložené
do 8 bajtov. K dispozícii máme 15 platných číslic Môžme však používať matematickú knižnicu BC, ktorú
PHP priamo podporuje. Čísla je možné zadávať aj v exponencionálnom tvare.
- $premenna = 4.2e3 ;// použitie
exponenc. tvaru
3.1.4 P O L E
Pole je špeciálna dátová štruktúra, v ktorej sú
jednotlivé premenné prístupné pomocou indexu.Index pola sa zapisuje do
hranatých zátvoriek. Jednotlivé prvky poľa môžu byť ľubovolného typu,
pričom index poľa môžu tvoriť aj reťazce.
-
- $pole[0] = "Slovensko";
- $pole[1] = "Maďarsko";
- $pole[2] = "Rusko";
-
- $obsah_skrine[0] ="Kosela";
- $obsah_skrine[2] = 5;
- $obsah_skrine[33] = 1.111111;
-
- $plat["Milan"] = 10000;
- $plat["Jozo"] = 20000;
Pole môžeme
inicializovať priradením hodnôt ku každému prvku, alebo jednoduchšie
a ľahšie pomocou funkcie Array Funkcia bude ukladať
hodnoty na prvé indexy, prípadne
od určitého indexu. Podobne je možné využiť tzv. prázdny index, kde sa
hodnota uloží na miesto prvého voľného indexu. Viac napovedia príklady:
- $mesiac[ ]="Januar";// tu
indexuje od 0
- $mesiac[ ]="Februar";
- $mesiac[ ]="Marec";
Skúsme použiť
array.
- $mesiac =
Array("Januar","Februar","Marec");//
tu indexujem od 0
- $mesiac = Array(1=>"Januar","Februar","Marec");//
tu index od 1
Operátor ‘=>’
môžeme použiť u ľubovolného
prvku poľa.
Občas je vhodné použiť
aj viacrozmerné pole. Vtedy stačí pridať do hranatých zátvoriek ďalší
index, pričom napr. dvojrozmerné pole sa práva ako pole jednorozmerné,
ktorého jednotlivé prvky sú tiež jednorozmerné polia.
Príklad 5
Vytvorte program, ktorý vypočíta súčet
prvkov na diagonále.
- <?php
- $M= Array (Array(5,4,3),
Array(3,2,1), Array(1,0,0));
- $vysledok = $M[0][0] + $M[1] [1] +
$M [2] [2];
- echo "Vysledok je ".$vysledok."
<BR>" ;
- ?>
Nezabudnite, že pole je indexované od nuly!
Pri práci s poľom
sa často používajú nasledujúce funkcie:
Reset ()
- nastaví index na prvý prvok poľa
Current()
- vráti hodnotu prvku poľa
Next()
- posunie ukazovateľ a vráti hodnotu prvku poľa
Count()
- zistí počet prvkov poľa
Key()
- vracia index poľa, na ktorý je nastavený ukazovateľ
Veľmi dôležitá je aj funkcia List(), ktorá
zabezpečuje načítanie poľa do premenných.
List
($mesiac_1,$mesiac_2,$mesiac_3) = $mesiac;
V premennej $mesiac_1 bude “Januar”, v premennej
$mesiac_2 “Februar” atď.
3.2 TYPOVÉ KONVERZIE
- Ako som už spomínal, PHP podporuje automatické
pretypovanie. Znamená to, že ak sčítame premennú typu integer s
premennou typu double, výsledok bude typu double.. V prípade, že chceme
typ premennej nastaviť manuálne, použijeme funciu SetType ($premenna, ”cielovy_typ”).
Ak chceme zistiť, akého je premenná typu, pou6ijeme funciu GetType(premenna).
Podobne môžeme použiť aj funkcie Is_Integer, Is_String,
Is_Double, Is_Array,Is_Object.
Je možné používať aj tzv. jednorázové pretypovanie známe z C-čka,
kde stačí žiadaný typ uviesť do zátvorky pred premennú.
-
- $a = 5.5 ;
//typ double
- $b = 10;
//integer
- $c = $a + $b;
//vysledok je double
- $d = (integer) $c; //
pretypujeme na integer
- SetType( $d,"double"); // a znova na
double
Pri konverzii string na
číslo a opačne PHP
postupuje nasledovne
1.
Ak retazec obsahuje na prvom mieste pismeno, bude = 0 inak krok 2
2.
Ak reťazec obsahuje ‘.’ , ‘E’ alebo ‘e’, bude typu double,
inak bude typu integer.
- $a = 100+ "100";
- $a = 100+ ".100";
- $a = 100+"Januar";
- $a = 100+"10 Januar";
- $a = 100+"-10e10 Januar"
3.3 KONŠTANTY
Konštanta slúži podobne ako premenná k uchovaniu hodnôt,
ale na rozdiel od premennej nemôže meniť svoju hodnotu. tá je prevne
definovaná pri inicializácii konštanty. Pre vytvorenie konštanty slúži funkcia define(meno_konštanty, hodnota, citlivosť_na_velkost_pismen).
Posledný parameter (true, false) nie je povinný.
define("pocet_mesiacov",12,true);
Konštanty pocet_mesiacov,
POCET_MESIACOV atď.. budú mať rovnakú hodnotu, a to 12. Na overenie,
či je konštanta definovaná, slúži funkcia defined (konštanta)
3.4 Premenná typu VARIANT
Premenná typu variant predstavuje výkonný
systém odlišného prístupu k premennej. Viac napovie príklad:
- $a = "b";
- $b = "Ahoj";
- echo $$a;
Čo sa vlastne udialo? Do premennej a
sme uložili reťazec b. Preto príkaz echo vypísal hodnotu premennej $b. Výhody?
Netušené, aj keď sa to nemusí zdať. Napríklad môžme ukladať do premenných
príslušné hodnoty. Táto vec napr. BORLAND DELPHI strašne chýba.
- $cislo_mesiaca=5;
- ${"mesiac".$cislo_mesiaca} = 31;
//priradi do premennej $mesiac5
pocet dni 31
Typ variant je vhodné používať aj ako ukazovateľ na funkcie. V novej verzii PHP však
bude tento systém trochu prepracovanejší.
- $funkcia = "Sin";
- echo $funkcia(100) ; //vypise sinus uhla 100
3.5 OBJEKTY A TRIEDY
Prívrženci OOP (objektovo orientovaného
programovania) sa doteraz určite len pousmievali a zabávali sa nad týmito
„prízemnosťami“. Mám tu však aj niečo pre nich. Jazyk PHP prináša možnosť
definície tried. Trieda je určitý typ, ktorý obsahuje dáta a dátové
štruktúry (ale aj nemusí) a funkcie (metódy), ktoré su nad danými dátovými
štruktúrami definované. Inštancia triedy v programe sa nazýva 3. objekt.
Objekt je teda fyz. štruktúra v pamäti počítača, pričom trieda je len akýsi
predpis, ako objekt vytvoriť. Pomocou tried a objktov dosiahneme väčšiu čistotu
a bezpečnosť programu, nakoľko to vychádza z objektovo orientovaného
programovania a jeho troch základných vlastností: dedičnosti, polymorfizmu a
zapúzdrenosti.
Trieda má v jazyku PHP nasledovný schématický tvar
- class meno_triedy
- {
- definícia premenných [
= inicializačná hodnota ] ;
- definícia funkcií
;
- }
- Definícia premenných začína
kľúčovým slovom var. Zoznam premenných oddeľujeme čiarkami, riadky
bodkočiarkami. Pri definícii triedy je možné ju hneď aj inicializovať,
ale nie je to povinné.
-
- class Cstudent
- {
-
var $aMeno, $aPriezvisko,$aRC;
-
var $aAdresa = "SLOVENSKO";
- }
Teraz vytvoríme
inštanciu triedy, objekt a priradíme ho premennej $student. Inštanciu
vytvoríme použitím funkcie new. Dealokáciu nevyužívaných objektov
a premenných PHP zabezpečuje automaticky. K jednotlivým premenným
objektu pristupujeme pomocou operátora ‘->’.
- $Student = new Cstudent;
- $Student->aMeno =
"Milan";
- $Student->aPriezvisko =
"Gacik";
- $Student->aRC = 7701116666;
- $Student->aAdresa = "Tatranska
Lomnica";
- echo $Student->aMeno . "BÝVA
NA ". $Student->aAdresa ." <BR>" ;
Funkcie
manipulujú s dátami v objekte. Podľa princípov OOP (zapúzdrenie)
by sa malo k premenným
pristupovať len pomocou definovaných funkcií (metód).
My si k triede Cstudent vytvoríme
jednu jednoduchú funciu Pohlavie()
, ktorá zistí z rodného čísla, o koho ide. Vo funkcii musíme používať
operátor this, ak chceme pristupovať k premennej, nakoľko tá ešte
fyzicky neexistuje.
Príklad 7
- <?php
class Cstudent
{
// definicia premennych
var $aMeno, $aPriezvisko,$aRC;
var $aAdresa = "SLOVENSKO";
// definicia funkcii
function Pohlavie()
{
if (($this->aRC[2]=="5")or($this->aRC[2]=="6" ))
echo "JE TO ZENA <BR>";
else echo "JE TO MUZ <BR>";
}
}
//Teraz vyskúšame:
$Student = new Cstudent;
$Student->aMeno = "Milan";
$Student->aPriezvisko = "Gacik";
$Student->aRC = (string) 7756116666;
$Student->aAdresa = "Tatranska Lomnica";
echo $Student->aMeno." ".$Student->aPriezvisko." BÝVA NA ADRESE: <BR>".
$Student->aAdresa ." <BR>" ;
$Student->Pohlavie();
?>
Funkcie budú
podrobnejšie rozobraté ďalej. Pravdaže, je možné volať funkciu aj s parametrami.
Medzi špeciálne funkci patria konštruktor a deštruktor. Ich názov sa
zhoduje s názvom triedy a plnia špeciálne funkcie, konštruktor
inicializuje a alokuje zdroje objektu, deštruktor ich zas uvoľnuje. PHP
vo verziin 3.x implementuje len konštruktor. (Ako to bude v PHP 4.x, nie
je mi zatiaľ úplne jasné-
nasledujúci príklad preto nemusí byť funkčný na PHP 4 ktorý
implementuje this trochu odlišne).
- Príklad 8

-
- <?php
class Cstudent
{
// definicia premennych
var $aMeno, $aPriezvisko,$aRC;
var $aAdresa = "SLOVENSKO";
function Cstudent ($aMeno,$aPriezvisko,$aRC,$aAdresa)
{
$this->aMeno = $aMeno;
$this->aPriezvisko = $aPriezvisko;
$this->aRC= $aRC;
$this->aAdresa= $aAdresa
}
function Pohlavie()
{
if (($this->aRC[2] ==”5” ) or ($this->aRC[2]==”6” ))
echo “JE TO ZENA <BR>”
else echo “JE TO MUZ <BR>”;
}
}
$Student = new Cstudent(“Milan”,”Gacik”,"7701117777",”Vysoke Tatry”);
$Student->Pohlavie();
?>
Konštruktor
je vhodné inicializovať default hodnotami vhodné sú napr. NULL stringy
- function Cstudent($aMeno =
"",$aPriezvisko="",$aRC=0,$aAdresa="")
//konštruktor
-
{
-
$this->aMeno =
$aMeno;
-
$this->aPriezvisko = $aPriezvisko;
-
$this ->aRC
= $aRC;
-
$this->aAdresa
= $aAdresa;
-
}
Inicializovať
potom môžeme rôzne. V prípade, že nedodáme atribút, konštruktor použije
default hodnotu.
- $student1 = new CStudent("Milan");
- $student2 = new CStudent ();
Dedičnosť
je ďalšia vlastnosť, ktorá je v PHP implementovaná. Škoda len, že na
polymorfizmus sa dostane asi až vo verzii PHP4/ZEND.
Máme teda
možnosť vytvoriť triedu, ktorá zdedí dátové typy aj metódy. K novovzniknutej
triede môžeme však pridať aj nové dátové typy a nové metódy. Pre
dedičnosť sa používa kľúčové slovo extends. Predpokladajme, že
každý študent musí mať od nového roka aj občiansky preukaz (viem, že
je to somarina, ale nevadí).
Vytvoríme teda novú triedu CStudentNew
- class CStudentNew extends Cstudent
- {
-
var aCislo_OP;
-
function Vypis_OP()
-
{
-
echo $this->aCislo_OP . "<BR>";
-
}
- }
-
- $Novy_Student = new CstudentNew;
- $Novy_Student->aCislo_OP = "SD
3789 111";
- $Novy_Student->Vypis_OP();
3.6 Jednoduché výrazy
Výraz je
vlastne hocičo, čo má nejakú hodnotu. Konštanta, či premenná suú takisto
výrazy. Funkcia, ktorá vracia hodnotu sa tiež považuje za výraz. V PHP
sa priradenie tiež chápe ako výraz
premenná = výraz;
Inicializovanie
premennej je teraz už ľahká záležitosť. Preprocesor vyhodnocuje z prava
do ľava, takže všetky premenné budú mať hodnotu 0;
- $a = 0; $b =0; $c = 0;
- $a = $b =$c =0;
Zložitejší
výraz tvorí nasledujúce priradenie:
premenná = výraz bin_operátor výraz;
|
lný zápis
|
Skrátený zápis
|
|
a = b + c
|
-
|
|
a = a + c
|
a += c
|
|
a = a - c
|
a -= c
|
|
a = a * c
|
a *= c
|
|
a = a / c
|
a /= c
|
|
a = a % c
|
a %= c
|
Operátory
majú stanovenú určitú prioritu, ktorú je možné ovplyvňovať pomocou zátvoriek.
Tabuľka priorít je uvedená nižšie. PHP podobne ako C-čko podporuje skrátený
zápis priradení. V nasledujúcej tabulke je uvedený prehľad operácií,
ktoré PHP umožňuje zadávať v skrátenej forme. Takže PHP rozpoznáva
dva základné druhy operátotov: unárne (+ , - ) a binárne (+,-,*,/,celočíselné
delenie / a následné pretypovanie a delenie modulo % ).To, či
bude delenie celočíselné alebo nie tu na rozdiel od jazyka C nezávisí od
typov operandov. PHP pozná špeciálne typy unárnych operátorov, ktoré su v
PASCALE neznáme a to: inkrement(++) a dekrement ( - - ). Oba operátory je možné
použiť ako predponu (prefix – a priori) alebo príponu
(suffix- a posteriori), pričom to má rôzny význam
*
inkrementuje pred použitím
* ikrementuje po použití
* výraz sa najprv zväčší o jednotku
* je vrátená pôvodná
hodnota
a nová hodnota je vrátená ako
výrazu a potom je výraz
hodnota výrazu
zväčšený o jednotku
-
- $a = 10;
- $a++;
- $b =++$a;
- $d = --$b – 2;
-
|
operácia
|
PASCAL
|
PHP
|
|
rovnosť
|
=
|
= =
|
|
nerovnosť
|
<>
|
! =
|
|
logický súčin
|
AND
|
& &
|
|
logický súčet
|
OR
|
| |
|
|
negácia
|
NOT
|
!
|
|
menší
|
<
|
|
menší alebo rovný
|
<=
|
|
väčší
|
>
|
|
väčší alebo rovný
|
>=
|
V prípade,
že potrebujeme výraz, ktorého výsledkom je pravda (TRUE) alebo
nepravda (FALSE), použijeme
napríklad v jazyku PASCAL typ Boolean. V jazyku
PHP však tento typ implicitne nie je, miesto neho sa používa typ Integer, kde
nulová hodnota znamená FALSE a nenulová (najčastejšie
1, ale nemusí to byť vždy tak) TRUE.
V nasledujúcej tabulke nájdete rozdiely medzi booleanovskými výrazmi v jazyku
PASCAL a PHP. Nezabudnite si uvedomiť rozdiel medzi porovnaním = = a priradením =.
$i = 5 je priradenie, ktoré mení hodnotu premennej i na
hodnotu 5
$i == 5 je výraz, ktorý vracia TRUE, ak premenná i jmá
hodnotu 5 a FALSE, ak má inú hodnotu, pričom hodnota i sa nemení
Jazyk PHP
podporuje podobne ako C skrátené vyhodnocovanie logických výrazov.Argumenty
výrazov sú vyhodnocované zľava doprava a hneď ako je možné určiť
konečný výsledok, vyhodnocovanie končí. Táto vlastnosť (short circuit)
sa využíva, napr. výraz
if ($y
!= 0 && $x / $y < $z)
je správny
a k deleniu nulou (DIVISION BY ZERO) nedôjde,
pretože prvá časť výrazu $y != 0 ukončí
vyhodnocovanie výrazu ešte pred delením.
3.7 Priority vyhodnocovania log. operátorov
Podobne ako
v jazyku C, má v PHP každý operátor
definovanú svoju prioritu, takže pri zložitejších operáciách a výrazoch
je presne určené, čo sa bude vykonávať ako prvé.
Ak majú dva operátory rovnakú prioritu, vykonávajú sa postupne zľava
doprava
Z tabulky je jasné, že napríklad index poľa a zátvorky majú
vyššiu prioritu ako napríklad inkrement, preto výraz ++$Pole[10]
bude vyhodnocovaný takto: Ideme
zprava doľava (implicitný
smer) a nájdeme operátor
s najvyššou prioritou [ ].Podľa
asociativity budeme postupovať teraz zľava doprava, našli sme premennú $Pole,
takže budeme niečo vykonávať s
prvkom poľa $Pole s indexom
10. Vyhodnocujeme výraz ďalej. Ďalší operátor v poradí priorít je
inkrement ++, ktorý vyhodnotíme zprava doľava, takže nám zvýši hodnotu
prvku poľa s indexom 10. (po lopate 10ty prvok poľa
$Pole sme zvýšili o 1).
V PHP
majú aritmetické operátory a operátor porovnania vyššiu prioritu,
ako logické operátory, takže výraz
if
($plat >= 10000 && $plat <= 20000)
je
správny, pričom Paskalovský výraz
if
($plat >= 10000 AND $plat
<= 10000)
je
chybný
Preto v logických
výrazoch (a často nielen tam) platí
pravidlo: “Zátvorka nič
nepokazí”
Na precvičenie
príklady. Skúste ich vyhodnotiť sami.
- $b = $b && ($a = 2) ;
- $b = $b && ($a == 2) ;
- $b = $b ||
($a / 2) ;
- $b = !$b && ($a = $a + 1) ;
Tu sú správne
výsledky:
1.
a bude 2, b bude
1, pretože b == 1 (TRUE) a výraz a =2 TRUE (nenulový)
2.
b bude 0, pretože a
== 1 FALSE
3.
b bude 1 ,a zátvorke
nezáleží
4.
b bude 0, a zostane
1, pretože !b je FALSE
Ak ste správne
vyhodnotili všetky výrazy, môžete sa smelo pustiť ďalej. V opačnom
prípade si ešte raz preštudujte príslušné pasáže, nakoľko neznalosť
takýchto elementárnych vecí sa zvykne neskôr vypomstiť. C-čkarom by to
nemalo robiť žiadne väčšie problémy.
Pre spájanie
reťazcov slúži operátor ‘.’
Operátor prevedie operandy na reťazce a spojí ich do jedného reťazca.
Samozrejme je možné používať aj skrátený operátor ’ .=’
Príklad 9
- $presny_cas="10:23";
- echo "Hello World ".
$presny_cas."
<<<";
- $retazec = "Ahoj ";
- $retazec .= " svet";
- echo
$retazec; // vypíše “Ahoj svet”
Prvý krát
sa stretávame so symbolom rekapitulácie, nakoľko nasledujúca kapitola
obsahovala toľko vecí, že rekapitulácia by zabrala ďalšie 3 strany, jej
opakovanie nechám na Vás. Nezabudnite si však vypracovať nasledujúce
kontrolné príklady, budú testom, či danej problematike naozaj rozumiete.
1.
Vytvorte skript, ktorý
vypíše “Priklad 1” a odriadkuje.
2.
Vytvorte skript, kde budete mať v poli názvy mesiacov.
3.
Vytvorte skript, kde v poli budete mať uložené adresy svojich
zamestnancov, pričom indexy poľa budú ich mená
4.
Vyskúšajte si typovú konverziu
N Á V R A T
Copyright 2003 MGX
|