Štábna kultúra:
Túto kapitolu som sem zaradil schválne, nakoľko si to žiada situácia. Zo všeobecných
skúseností je známe, že najme odporúčania týkajúce sa úpravy programov
vyvolávajú nechuť a odpor. Pokiaľ však chceme písať väčšie
programy, je nutné zaviesť nejaký poriadok a ak už nejaký zaviesť,
tak je zbytočné vymýšľať už vymyslené. Takmer za každým odporučením
skúsim uviesť aj príklad.
ü
Odsazujte o 2
medzery každý logický úsek programu
- if
($x == $y) {
-
echo ‘Hello’;
-
}
-
else {
-
echo ‘Ahoj’;
-
}
ü
Nezabúdajte vkladať
prázdne riadky, zlepšujú čitateľnosť programu
ü
Unárne operárory
neoddeľujte od operandu medzerou!
- $i++;
-
$j + = --$i;
// zle !
ü
Ľavá zložená zátvorka
označujúca blok je vždy v riadku sama. Podobne aj ukončujúca zložená
zátvorka. Úvodná zátvorka môže byť spolu s if, else, for, while,
switch, return.
-
function Is_Index()
-
{
-
// tu je vhodny priestor na komentare
-
echo (“Hello”);
-
}
ü
Každý výraz (priradenie)
na samostatný riadok. Výnimku
tvoria príkazy s tesnou súvislosťou.
x =
GetPositionX; y = GetPositionY;
ü
Mená objektov, premenných či funcií píšte zásadne malými písmenami
(prípadne prvé veľké – to je moja odchýlka od normy, budem sa ďalej snažiť).
Využívajte podtrhovník. Nepoužívajte podobné identifikátory a identifikátory
odlíšené len veľkosťou písma (syst, ssyt, Meno,meno).
ü
Mená objektov musia
mať význam, napr. meno a nie m1. Ak sa ku programu
neskôr vrátite, nemusíte zabiť 30 minút dumaním, čo premenná x1zf4 vlastne
znamená. Nehovorím už o prípadných spolupracovníkoch, ktorí majú chuť
vraždiť pri lúštení Vášho špagetového kódu.
ü
Tvorte mená racionálne,
podľa určitého predpisu, napr:
view_file,
print_file, Get_Your_Name()
ü
využívajte tzv.
prefixy napr C – class, O – object, a – atribút, T – typ, R – record
F-pole, P-pointer
ü
Bežne používané významové
identifikátory
i,j,k - indexy,
parametre cyklu
c,ch - znaky
m,n - čítače
f,r
- reálne
čísla
p
- pointer
s
- reťazec
ü
Nezabúdajte na
komentáre
1.2
Podmienený výraz
Podmienený výraz je tiež novinkou,
ktorá sa v jazyku Pascal nevyskytuje. Patrí medzi ternárne operátory,
čo znamená, že má až tri operandy. Podmienený výraz je zároveň jediným
ternárnym operátorom, ktorý PHP podporuje. Jeho syntax je nasledujúca:
výraz_podmienka ?
výraz_1 :
výraz_2
A má význam:
if výraz_podmienka then výraz_1 else výraz_2, čiže
výsledná hodnota výrazu je buď výraz_1 alebo výraz_2, čo závisí na
hodnote (pravdivosti) výrazu
výraz_podmienka. Na objasnenie malý príklad:
- Príklad 1

-
<?php
$i=$j=$k=10;
$i=($j==10) ? 1:3; // i bude 10
$k=($i>$j) ? $i:$j;// k bude maximum z i a j, teda 10
echo "Maximum z $i a $j je $k";
?>
Nezabudnite,
že z výrazu sa stane príkaz, ak ho ukončíte bodkočiarkou!
( $i == $j) ? $i++ : $j++ ;
Väčšinou sa podmienený výraz nepoužíva, nakoľko klasická konštrukcia
if-then-else je čitateľnejšia, ale ako som už viackrát spomenul, neplatí
to vždy.
1.3
Operátor čiarka
Syntax operátora
čiarka je jednoduchá – výraz1, výraz2. PHP spracováva najprv výraz1,
zapamätá si jeho výsledok a potom spracuje výraz2. Operátor čiarka sa
využíva len v riadiacich častiach príkazov for a while
alebo u príkazov s tesnou súvislosťou (viď
kapitola 4.1). Nezabudnite,
že operátor čiarka má najnižšiu prioritu!
- $meno = "Janko", $priezvisko ="Hraško" ; // toto nie je
operátor čiarka
- $vek = ($vek++ , 0 – $vek);
//je nutné použiť zátvorku
1.4
Vetvenie programu
Php ponúka dva príkazy, ktoré umožňujú vykonávať určitú časť
skriptu podmienene. Slúžia na to príkazy if a switch v rôznych
variáciách.
4.4.1 Príkaz if-else
Najjednoduchšia verzia použitia vetviaceho príkazu if
je daná nasledujúcou syntaxou:
if ( výraz ) príkaz
;
V príklade
vydelíme premennú $delenec premennou $deliteľ,
ale len v prípade, že premenná $deliteľ
sa nerovnä nule, aby nedošlo k deleniu nulou.
if
( $delitel !=0 ) $podiel = $delenec / $delitel ;
PHP vyhodnocuje nulov[ premenn[ ako FALSE, takže nasledujúci zápis bude ekvivalentný:
if ( $delitel ) $podiel
= $delenec / $delitel ;
V prípade viacerých príkazov použijeme zložené zátvorky,
ktoré vytvoria tzv. blok alebo zložený príkaz.
- if ( $delitel == $delenec )
- {
-
$vysledok = 1
-
echo $vysledok;
- }
Podobne môžeme
použiť namiesto zložených zátvoriek aj syntax if – endif
- if ( $delitel == $delenec )
:
-
$vysledok = 1
-
echo $vysledok;
- endif;
Využíva sa
to pri písaní scriptov, v ktorých sa prelína PHP s HTML kódom, čo
sa deje skoro stále a často.
4.4.2 Príkaz if-else
Častejšie sa však stretávame so situáciou ak pri
splnení posmienky potrebujeme vykonať činnosť A a pri nesplnení činnosť
B. Nato slúži výborne príkaz if-else, ktorý má nasledujúcu syntax:
if
( výraz)
príkaz_A
;
else
príkaz_B
;
Namiesto príkazov
príkaz_A a príkaz_B môžeme použiť zložený príkaz, či už pomocou
zložených zátvoriek alebo pomocou dvojbodky a endif. Nasledujúce konštrukcie
majú preto rovnaký význam.
- if
( $delitel == $delenec )
- {
-
$vysledok = 1
-
echo $vysledok;
- }
- else
- {
-
$vysledok = $delenec / $delitel;
-
echo $vysledok;
- }
a pomocou if-else –endif
- if ( $delitel == $delenec ) :
-
$vysledok = 1;
-
echo $vysledok;
-
- else:
// dvojbodka je tu nutná
-
-
$vysledok = $delenec / $delitel;
-
echo $vysledok
;
- endif;
4.4.3 Príkaz if-elseif-else
Táto konštrukcia opäť rozširuje možnosti
príkazu if. Príkaz uvedený za elseif sa vykoná, ak nie je
splnená podmienka pre if a zároveň je splnená podmienka za elseif.
Časť elseif môžeme použiť aj viackrát. Príkaz else sa
vykoná len vtedy, ak nie je splnená žiadna podmienka elseif.
- if ($a < $b)
-
echo ‘a je menšie ako b’;
- elseif ($a == $b)
-
echo ‘a a b sa rovnaju’;
- else
-
echo ‘a je v]43ie ako b’;
Môžeme používať aj zložené príkazy,
či už pomocou zložených zátvoriek alebo dvojbodky a príkazu endif.
4.4.4 Príkaz switch
V prípade, že máme viac podmienkových
vetiev, oplatí sa používať príkaz switch. Jeho syntax je nasledovná:
- switch ( výraz1 )
- {
-
case HODNOTA A :
-
príkazA1;
-
príkazA2;
-
......
-
break;
-
case HODNOTA B :
-
príkaz B1;
-
príkaz B2;
-
...
-
break;
-
...........
-
default:
-
príkaz XXX1;
- }
Ako to funguje? Najprv sa vyhodnotí výraz1
a potom sú postupne prechádzané hodnoty za case, až kým sa nenájde
hodnota, ktorá sa rovná výrazu1. Následne sa vykonávajú príkazy, až
kým sa nenarazí na príkaz break alebo koniec príkazu switch.
Upozorňujem na to, že sa spracovávajú všetky príkazy (aj za case,
pokiaľ sa nenarazí na break). Časť default sa vykoná vtedy,
ak ani jedna hodnota sa nerovná výrazu1. Časť default je
nepovinná.
- switch ($pismeno)
- {
-
case "A" :
-
case "a" :
echo "Pismeno A alebo a";
-
break;
-
case "B" :
-
case "b" : echo "Pismeno B alebo
b";
-
break;
-
default: echo "Nebolo to ani A, ani
B";
- }
Rovnaký význam
má aj alternatíva s bodkočiarkou a endswitch.
- switch ($pismeno) :
-
case "A" :
-
case "a" :
echo "Pismeno A alebo a";
-
break;
-
case "B" :
-
case "b" : echo "Pismeno B alebo
b";
-
break;
-
default: echo "Nebolo to ani A, ani
B";
- endswitch;
-
- 4.5 Cyklus
Jazyk PHP podporuje používanie troch príkazov pre iteráciu
while, for a do-while, ktoré majú podobnú syntax ako príkazy
cyklu používané v jazyku PASCAL a C. Než ich vysvetlím, bude vhodné oboznámiť
sa s príkazmi break a continue,
ktoré ovlyvňujú prevádzanie všetkých cyklov.
4.5.1 Príkaz break a continue
Tieto príkazy možno použiť pri všetkých
typoch cyklov a obidva nejakým spôsobom menia normálny priebeh cyklu
break
ukončuje najvnútornejšiu neuzavretý cyklus – okamžite opúšťa
cyklus
continue
skáče na koniec najvnútornejšieho neuzavretého cyklu a tým si vynúti
ďalšiu iteráciu vnútorného cyklu – cyklus neopúšťa
Za príkazom
break je v PHP nepovinný argument , ktorý udáva koľko cyklov bude ukončených.
Využíva sa to v prípade viacerých vnorených cyklov.
4.5.2 Príkaz while
Tento iteračný príkaz testuje podmienky cyklu ešte
pred prechodom cyklu, čo znamená že cyklus nemusí prebehnúť ani raz. Príkaz
while používame, ak závisí ukončovacia podmienka na nejakom príkaze
v tele cyklu. Zadaný cyklus sa teda prevádza len vtedy, ak je splnená
podmienka na začiatku, preto sa mu aj hovorí cyklus s podmienkou na začiatku.
while (výraz) príkaz ;
Príkaz môže
byť pravdaže nahradený zloženým príkazom, či už s použitím zložených
zátvoriek alebo s dvojbodkou a kľúčovým slovom endwhile
- $cislo = 0;
- while ( $cislo < 10)
- {
-
echo $cislo ." <BR>" ;
-
$cislo++ ;
- }
-
- $cislo = 0;
- while ( $cislo < 10) :
-
echo $cislo ." <BR>" ;
-
$cislo++ ;
- endwhile ;
ü
V prípade, že
je príkaz while prázdny, odsadzujte bodkočiarku na nový riadok
-
while ($cislo == 0)
-
;
4.5.3 Príkaz do-while
Tento príkaz je ekvivalent Paskalovského
REPEAT-UNTIL. Podmienka sa tu testuje a6 po prechode cyklom, teda cyklus
prebehne najmenej raz a hovorieva sa mu cyklus s podmienkou na konci.
do
{
príkazy;
} while ( výraz) ;
K príkazu
do-while neexistuje alternatívna syntax. Pozor! Medzi Pascalom a PHP je
podstatný rozdiel vo vyhodnocovaní
záverečnej podmienky. Pascal opúšťa cyklus pri splnení záverečnej
podmienky, PHP práve naopak, pri jej nesplnení.
- do
-
i++ ;
- while ( i<100 );
ü
Pokiaľ do-while
obsahuje zložený výraz, je vhodné písať podmienku while za uzatváracou
zloženou zátvorkou “}” zloženého príkazu.
4.5.3 Príkaz
for
Je príkaz cyklu, ktorý použijeme v prípade, že j
epredom známy počet prechodov cyklom. Jeho syntax je nasledovná:
for (výraz1 ; výraz2;
výraz3)
príkaz;
výraz1 je vyhodnotený pred začiatkom prevádzania
cyklu. Potom je vyhodnotený výraz2. Aj je vrátené TRUE, prevádza sa
telo cyklu príkaz. Na konci každého prechody cyklom sa vyhodnotí výraz3,
čo sa deje tak dlho, pokiaľ má výraz2 hodnotu TRUE. Obvykle sa výraz1
používa na inicializáciu riadiacej premennej cyklu, výraz2 je
podmienka prevádzania cyklu a výraz3 slúži na pravidelnú aktualizáciu
riadiacej premennej cyklu. Skúsme vypísať čísla 1 až 100.
- for
($i = 1 ; $i < 10 ; $i++)
- {
-
echo $i ;
- }
-
- for
($i = 1 ; $i < 10 ; $i++) :
-
echo $i ;
- endfor;
Namiesto jediného
príkazu príkaz je možné použiť zložený príkaz v obidvoch
povolených verziách buď s zloženými zátvorkami alebo dvojbodkou a endfor.
Takisto je možné používať operáciu čiarka, napríklad
pri inicializácii riadiacej premennej cyklu.
for ($i=10 , $j =20; $i+$j
<100; $i++, $j++);
4.6 Používanie knižníc
V jazyku PHP slúži na načítanie knižníc príkaz require
a include. Knižnice sú vlastne skripty, prípadne časti stránok,
ktoré používame vo viacerých skriptoch. Väčšinou obsahujú preddefinované
funckie, prípadne hlavičky alebo pätičky stránok.
4.6.1 Príkaz require
Príkaz require slúži na načítanie skriptu. Na
čítaný skript sa vykoná a potom PHP interpreter pokračuje ďalej vo vykonávaní
pôvodného skriptu. Príkaz require sa však vykoná iba raz, ak by sme ho napríklad
chceli použiť v cykle, je nutné použiť príkaz include. Syntax príkazu
require je nasledovná:
require “ meno_suboru “ ;
Pokiaľ u mena
súboru neuvedieme cestu, PHP ho hľadá v adresári určenom podľa
direktívy include_path v konfiguračnom súbore php.ini (prípadne
php3.ini v starších verziách PHP 3.x).. Nakoľko direktíva include_parh
neobsahuje nič, ani bodku označujúcu aktuálny adresár, preto je nutné
cestu explicitne určiť
require “./moja_kniznica.php”;
PHP pre Windows automaticky prekóduje
lomítko na spätné lomítko
4.6.1 Príkaz include
Syntax príkazu je rovnaká ako u príkazu require:
include “ meno_suboru “ ;
Nezabudnite, že príkaz include je nahradený zloženým
príkazom, ktorý PHP interpreter načíta z knižnice (vlastne to bude celý
obsah knižnice). Preto je nasledujúca konštrukcia chybná:
- for ($i =0 ; $i < 5; $i++)
-
include ”/moja_kniznica.php”;
Správna je nasledujúca konštrukcia
- for ($i =0 ; $i < 5; $i++)
- {
-
include “./moja_kniznica.php”;
- }
alebo
- for ($i =0 ; $i < 5; $i++) :
-
include “./moja_kniznica.php”;
- endfor;
4.7
Funkcie
Ak sa v našich skriptoch opakuje určitá sekvencia príkazov,
je vhodné túto sekvenciu príkazov nadefinovať ako funkciu. Potom stačí v
mieste, kde chceme vykonať sekvenciu príkazov zavolať našu funkciu. Výsledkom
je prehľadnejší, kratší a úspornejší kód. V takomto kóde je ľahšie
sa orientovať a zároveň sa tu rýchlejšie hľadajú prípadné chyby. Definícia
funckie je nasledovná:
function
meno_funkcie (parameter1,
parameter2,
... )
{
príkazy ;
return
hodnota ;
}
Pomocou parametrou predávame hodnoty,
ktoré chceme spracovať. Príkazom return
funkcia vracia svoj výsledok. Pri jednoduchých funkciách môžeme parametre
úplne vynechať, podobne ako návrat hodnoty príkazom return. Príklad
jednoduchej funkcie:
- function hlavicka ()
- {
-
echo "<H1> Dynamically generated
by PHP </H1><BR>";
- }
V našom
programe môžeme kedykoľvek zavolať túto funkciu príkazom hlavicka ();
Zátvorky za
názvom funkcie je nutné použiť aj v prípade, že funckia nemá žiadne
parametre.
Hlavná sila funkcií však spočíva v používaní
parametrov. Môžeme tak nadefinovať funkcie, ktoré PHP štandartne
neobsahuje. Napríklad výpočet druhej mocniny čísla:
- function Mocnina($cislo)
- {
-
return $cislo * $cislo ;
- }
- // hlavny program
- echo "Druha mocnina cisla 5 je
".Mocnina(5);
V definícii
funkcie hovorme, že funkcia Mocnina
má
jeden parameter. Výsledok vrátime pomocou príkazu return. Funkcia môže
mať pravdaže aj viac parametrov:
- function Max ($a, $b)
- {
-
return $a > $b ? $a : $b ;
- }
Pomocou funkcie Max() je možné
zistiť, ktoré číslo je väčšie. Jeho parametre môžu byť konštanty Max(5,10),
premenné Max($cislo1,$cislo2) alebo výrazy Max(5*5,100-25). Parametrom
môžu byť všetky typy dát, ktoré PHP podporuje. Rovnako všetky podporované
typy môže PHP aj vracať.
4.7.1 Premenné vo funkciách
V bežnom
skripte je premenná s rovnakým názvom tou istou premennou a reprezentuje
jednu hodnotu. Ak však používame funkcie, premenné, ktoré sú vo vnútri
funkcie nemajú s ostatnými premennými nič spoločné, aj keď majú
rovnaké meno. Je to preto, aby funkcia omylom nezmenila hodnotu globálnej
premennej
- function Vypocet()
- {
-
$cislo = 10;
- }
-
- $cislo = 0;
- Vypocet();
- echo $cislo
Tento skript
by vypísal číslo 0. V prípade, že vo funkcii chceme ovlyvniť hodnotu
globálnej premennej, je nutné na jej začiatku určiť, ktoré globálne
premenné bude funkcia používať. Robí sa to pomocou kľúčového slova global.
- function Vypocet()
- {
-
global $cislo;
-
$cislo = 10;
- }
-
- $cislo = 0;
- Vypocet();
- echo $cislo;
Okrem príkazu
global je možné použiť aj pole $GLOBALS, v ktorom má
PHP uložené všetky globálne premenné. K poľu $GLOBALS
pristupujeme ako k asociatívnemu poľu pomocou indexu, ktorý tvoí meno
premennej bez znaku ‘$’.
- function Vypocet()
- {
-
$GLOBALS["cislo"]= 10;
-
$cislo = 10;
- }
-
- $cislo = 0;
- Vypocet();
- echo $cislo;
Ak
potrebujeme, aby sa premenná pri prvom volaní funkcie inicializovala, je vhodné
použiť kľúčové slovo static. Pri ďalších volaniach funkcie sa
premenná $index zvyšuje,
ale už nie od 0.
- function Get_Index()
- {
-
static $index = 0;
-
return $index++;
- }
4.7.2 Predávanie
parametrov pomocou odkazu
V predchádzajúcich
príkladoch sme používali predávanie parametrov pomocou hodnoty. PHP však
podporuje aj predávanie parametrov pomocou odkazu. Funkcia, ktorá používa
predávanie parametra pomocou odkazu má rovnaký syntax ako ostatné funkcie,
len pred parametrom je znak ampersand ‘&’. Objasní
to príklad:
- function Odkaz(&$a,$b)
- {
-
$a=0;
-
$b=1
- }
-
- $m=100;
- $n=200;
- Odkaz($m,$n);
- echo $m,$n;
4.7.2 Parametre
Často sa stáva, že niektoré
parametre sú nepovinné alebo impicitne definované. Na vysvetlenie použijem ríklad
s mocninou. Povodná verzia rátala len druhú mocninu. Nový príklad bude
mať štandartnú hodnotu parametra 2, ak pri volaní funkcie parameter nepoužijeme.
- function Mocnina($cislo, $exponent=2)
- {
-
$pom=$cislo
-
for ($i=1; $i < $exponent; $i++) $pom
*= $zaklad;
-
return $pom ;
- }
- // hlavny program
- echo "Druha mocnina cisla 5 je
".Mocnina(5);
- echo "tretia mocnina cisla 5 je
".Mocnina(5,3);
Ako štandardné hodnoty parametrov je možné v PHP použiť
iba skalárne typy: integer,
double, string. Nie je možné používať polia ani objekty.
4.7.2 Rekurzia
V rekurzii
ide vlatne o to, že v tele funkcie sa použije volanie tej istej
funkcie. Rekurziou je možné skrátiť niektoré výpočtové algoritmy.
Nebezpečenstvo však číha v možnosti pretečenia zásobníka, pri tzv.
„utopení“ rekurzie. Klasická rekurzia je výpočet faktoriálu“
- function Faktorial($Fakt)
- {
-
return $Fakt == 0 ? 1 : $Fakt *
Faktorial($Fakt – 1);
- }
4.8 Eval, Die
Príkaz eval má nasledujúcu
syntax:
eval
(reťazec);
Obsah reťazca
bude vykonaný akoby to bol príkaz PHP.
eval
("echo \$text");
Príkazom Die () je možné kedykoľvek
ukončiť vykonávanie skriptu. Podobne je možné použiť aj príkaz exit.
Tento príkaz však je nutné používať opatrne, nakoľko pri kombinovanom používaní
s HTML tagmi náš sript pri násilnom ukončení vygeneruje nekorektnú HTML
stránku bez ukončovacích príkazov </BODY> a </HTML>. Preto je
vhodnejšie volať funkciu Register_Shutdown_function().
4.9 Regulárne výrazy
Pomocou
regulárnych výrazov je možné definovať masku, ktorá slúži na zisťovanie
obsahu textových reťazcov. V PHP sú definované funkcie, ktoré slúžia
na analýzu, kontrolu a separáciu textových reťazcov na základe regulárnych
výrazov.
Pojednanie o regulárnych
výrazoch bude uverejnené neskôr, nakoľko ide o dosť rozsiahlu a zložitú
problematiku.
N Á V R A T
Copyright 2003 MGX
|