Php Knyga (PDF)
-
Upload
ramidas-grikstas -
Category
Documents
-
view
983 -
download
33
Transcript of Php Knyga (PDF)
PHP Pamokos Pradedantiesiems
Knyga tiems, kurie nori drąsiai žengti
pirmuosius žingsnius
Povilas Širvinskas http://www.skaitykIT.lt
© 2011
2
TURINYS
1. Apie PHP ....................................................................................................................... 4
1.1. PHP pritaikymas ir populiarumas ....................................................................... 4
1.2. PHP veikimo principai .......................................................................................... 4
2. Pasiruošimas darbui .................................................................................................... 6
2.1. Kur rašyti kodą? .................................................................................................... 6
2.2. Kur talpinti savo PHP projektus? ....................................................................... 9
2.3. Web-serveris lokaliame kompiuteryje ............................................................. 10
3. Darbas su PHP: pradţia ........................................................................................... 12
3.1. Pirmasis PHP skriptas ....................................................................................... 12
3.2. PHP ir HTML ....................................................................................................... 13
3.3. Komentarai programose .................................................................................... 14
4. Kintamieji ir matematika ............................................................................................ 15
4.1. Kintamieji ir darbas su jais ................................................................................ 15
4.2. Matematinės operacijos .................................................................................... 16
4.3. Kintamieji - tekstinės eilutės ............................................................................. 16
4.4. Kintamųjų išvedimas į ekraną ........................................................................... 16
5. Darbas su teksto eilutėmis ....................................................................................... 18
5.1. Viengubos ir dvigubos kabutės ........................................................................ 18
5.2. Funkcijos darbui su tekstais .............................................................................. 19
6. Sąlygos sakiniai ......................................................................................................... 21
6.1. IF .. ELSE............................................................................................................. 21
6.2. Kokios gali būti sąlygos ..................................................................................... 22
6.3. Operatorius SWITCH .. CASE .......................................................................... 23
7. Ciklai ............................................................................................................................ 25
7.1. Ciklas WHILE ...................................................................................................... 25
7.2. Atvirkščias ciklas DO .. WHILE ........................................................................ 27
7.3. Ciklas FOR .......................................................................................................... 28
7.4. Ciklas FOREACH ............................................................................................... 29
8. Masyvai ....................................................................................................................... 30
8.1. Kaip saugoti duomenis masyvuose ................................................................. 30
8.2. Kaip sukurti masyvą ........................................................................................... 31
8.3. Vidurkio skaičiavimas: masyvo apdorojimas cikle FOR ............................... 32
8.4. Masyvai su tekstiniais raktais: ciklas FOREACH .......................................... 32
8.5. Pagalbinės funkcijos darbui su masyvais ....................................................... 33
9. Skripto parametrai: $_GET masyvas ...................................................................... 34
9.1. Kaip su PHP gauti reikšmes iš URL adreso eilutės ...................................... 34
9.2. Pavyzdys - pasirinkto sąrašo elemento priskyrimas ..................................... 35
10. Praktinė uţduotis: loterija "Loto 6" ........................................................................ 37
10.1. Sąlygos .............................................................................................................. 37
10.2. Etapas 1. Parametrų nuskaitymas ................................................................ 37
10.3. Etapas 2. Lošimo generavimas ...................................................................... 38
10.4. Etapas 3. Informacijos išvedimas į ekraną ................................................... 39
3
10.5. Etapas 4. Pilnas skripto PHP kodas ir uţduoties pasunkinimas .............. 39
11. Formos ir jų apdorojimas ........................................................................................ 41
11.1. HTML: formos sukūrimas ................................................................................ 41
11.2. PHP: duomenų perdavimas į PHP skriptą - metodai GET ir POST ......... 43
11.3. PHP: uţpildytos formos duomenų apdorojimas .......................................... 44
12. Funkcijų rašymas ..................................................................................................... 46
12.1. Kaip sukurti funkciją ......................................................................................... 46
12.2. Kaip iškviesti funkciją ir ją panaudoti ............................................................ 47
13. Vartotojų sesijos ...................................................................................................... 49
13.1. Sesijos sukūrimas ir panaudojimas ............................................................... 49
13.2. Sesijos panaudojimo pavyzdys - autorizacijos mechanizmas .................. 50
14. Data ir laikas ............................................................................................................. 52
14.1. Funkcija time() .................................................................................................. 52
14.2. Funkcija date() .................................................................................................. 52
14.3. Funkcija strtotime()........................................................................................... 53
15. MySQL duomenų bazės sistema .......................................................................... 54
15.1. Kas yra duomenų bazė? ................................................................................. 54
15.2. SQL kalba .......................................................................................................... 56
15.3. Darbas su duomenų MySQL baze: įrankis PhpMyAdmin .......................... 57
15.4. PHP ir MySQL: prisijungimas ir uţklausų vykdymas .................................. 57
15.5. Darbo su duomenų baze uţbaigimas ........................................................... 59
16. Objektinis programavimas ...................................................................................... 60
16.1. Kas yra OOP ir kam jo reikia .......................................................................... 60
16.2. Objektai ir klasių panaudojimas ..................................................................... 64
16.3. Paveldėjimas ..................................................................................................... 65
Knygos apibendrinimas ................................................................................................. 67
4
1. Apie PHP
Kam skirta ši kalba ir kodėl ji tokia populiari
Taigi, pasiryţote išmokti PHP? Bet pradėti gal reikia nuo to, kas tai yra per kalba. PHP kalbą
1994 metais sukūrė Rasmus Lerdorf iš Danijos, pradţioje pavadinęs ją “Personal Home Page
Tools”, ir tik vėliau, išsiplėtus jos galimybėms, abreviatūros prasmė pasikeitė į “PHP Hypertext
Preprocessor”, bet pačios trys raidės išliko tos pačios - PHP.
1.1. PHP pritaikymas ir populiarumas
Tai yra programavimo kalba, daugiausiai naudojama interneto projektams kurti - iš esmės, dėl to
ji tokia paplitusi ir populiari. Pagal 2010 metų duomenis, 50-60 procentų pasaulio interneto
svetainių yra sukurta būtent su PHP. Jeigu jums paţįstamos tokios turinio valdymo sistemos, kaip
Wordpress, Joomla, Drupal - tai ţinokite, visos jos parašytos su PHP kalba. Tarp kitko, tas pats
Facebook irgi naudoja PHP, tik jie nuėjo kiek kitu keliu ir pamodifikavo pačią kalbą bei sukūrė
savo modifikaciją, kuri naudojama būtent jų projektui.
Laikoma, kad PHP kalbą yra gana paprasta išmokti, iš dalies to prieţastis yra tai, kad internete
yra labai daug dokumentacijos, forumų, paruoštų nemokamų PHP skriptų ir kitų resursų, tad jei
norėsite išmokti - patikėkite, informacijos yra tikrai gausu, tik reikia mokėti ją surasti ir susigaudyti
joje.
1.2. PHP veikimo principai
Esminis PHP parašytų programų (skriptų) skirtumas nuo kitų kalbų yra tai, kad programa veikia
ne jūsų kompiuteryje, o taip vadinamame web-serveryje, kur ją gali pasiekti N vartotojų iš viso
pasaulio.
Principas toks:
- Jūs įrašote naršyklėje adresą: http://www.kazkas.lt;
- Vyksta kreipimasis į web-serverį, kuris perduoda komandą konkrečiam PHP skriptui
vykdyti;
5
- PHP skriptas įvykdomas ir daţniausiai grąţina tekstinį rezultatą, kuris perduodamas į
naršyklę;
- Jūs naršyklėje matote tą sugeneruotą tekstą.
Kita vertus, tas web-serveris nebūtinai turi būti kitame kompiuteryje, ir jūsų projektas nebūtinai iš
karto turi turėti WWW adresą - kitame skyrelyje parodysime, kaip visas reikalingas priemones
įdiegti lokaliai jūsų kompiuteryje ir iš karto pradėti programuoti.
Tiek apie pačią kalbą, o dabar pasiruoškime darbui - tam skirtas sekantis skyrelis.
Apibendrinimas
Trumpai apţvelgėme PHP kalbos pritaikymą ir populiarumo prieţastis, o taip pat programų
veikimo principus.
6
2. Pasiruošimas darbui
Kokių įrankių reikia, kad galėtume programuoti PHP
Kad automobilis vaţiuotų, reikia jį tinkamai paruošti. Taip pat ir čia - kad galėtumėte programuoti
ir kurti realius projektus, reikia paruošti tam tikrus įrankius ir darbo vietą. Šis procesas turi atsakyti
į du klausimus:
- Su kokia programa programuosime (kur rašysime kodą)
- Kur talpinsime projektą (savo kompiuteryje arba nutolusiame serveryje)
Abiem atvejais yra įvairių variantų, pabandysime atskirai paaiškinti jų pliusus ir minusus. Bet jūs
pasiliekate teisę neklausyti mūsų rekomendacijų ir programuoti su kitokiu teksto redaktoriumi
arba laikyti savo svetainę kitur, negu parodyta šios knygos rėmuose.
2.1. Kur rašyti kodą?
Pradėkime nuo šio pirmo klausimo. Iš esmės, PHP kalbos skriptas yra tekstinis failiukas su
išplėtimu *.php. Tad to failiuko tekstas gali būti rašomas bet kokiame tekstiniame redaktoriuje,
pradedant nuo Windows sistemoje esančio Notepad. Bet, be abejo, technologijos patobulėjo, ir
buvo sukurta nemaţai sistemų, palengvinančių kodo rašymą. Deja, nėra tokios vienos
programos, kuri būtų dominuojanti rinkoje ir kurią galėtume drąsiai rekomenduoti visiems jums.
Tad pasiūlysime trisnemokamus variantus ir paliksime jums teisę rinktis.
7
1. Notepad++
Nemokamas ir lengvas tekstinis redaktorius, kuris leidţia gana patogiai rašyti programinį kodą,
tame tarpe ir PHP. Pagrindinis jo pliusas - kodo elementų nuspalvinimas pagal jų prasmę, kad
galima būtų aiškiau akimis atskirti kodo dalis vieną nuo kitos. Taip pat programa palaiko įskiepių
sistemą, ir būtent PHP kalbai yra sukurta keletas iš jų.
2. Eclipse PDT
Eclipse yra plačiai IT pasaulyje ţinomas įrankis programavimui, daugiausiai paplitęs tarp Java
kalbos programuotojų. Tačiau vienas iš Eclipse variantų vadinasi Eclipse PHP Development
Tools, arba, trumpiau - Eclipse PDT. Tikrai galinga programavimo aplinka su labai daug
papildomų funkcijų ir groţybių. Vienintelis minusas - senesniuose kompiuteriuose gali dirbti
kaţkiek lėčiau.
3. PSPad
Tekstinis redaktorius, kuris buvo sukurtas, mąstant apie pritaikomumą būtent PHP kalbai, nors
puikiai tinka ir kaip HTML redaktorius, ir dar kitokiems tikslams. Turi įmontuotą FTP klientą, kas
leidţia patogiai dirbti su nutolusiame serveryje esančiais projekto failais.
8
Visi šie pateikti redaktoriai yra nemokami, tai jų privalumas. Tačiau yra ir mokamų produktų, kurie
pasiţymi gausybe papildomų funkcijų bei patogumu. Jie skirti daugiau rimtoms kompanijoms ir
didesniems projektams, bet galbūt ir jūs susidomėsite jais:
4. Zend Studio
Tai yra ne tik kodo redaktorius, bet ir visa aplinka, kurioje galima testuoti kodą, leisti PHP
skriptus, patogiai gaudyti jų klaidas ir naudotis komandinio darbo privalumais. Tiesa, kaina irgi
solidi - apie 400 dolerių.
5. NuSphere PhpEd
Taip pat labai galinga aplinka, panaši į Zend Studio. Čia jūs irgi galėsite patogiai ir efektyviai kurti
savo projektus.
9
6. Adobe Dreamweaver
O čia šiek tiek kitoks produktas. Jis iš esmės nėra skirtas programavimui PHP kalba, tačiau tai
yra galingas HTML redaktorius, kuriame patogiai spalvinami įvairių kalbų kodo tekstai. Tad jeigu
jums reikės vienu metu redaguoti HTML, CSS, JavaScript ir PHP failus - pamąstykite apie šį
variantą.
2.2. Kur talpinti savo PHP projektus?
Čia jau įdomesnis klausimas. Iš esmės, yra du variantai:
1. Uţsisakyti web-hostingo paslaugas ir laikyti savo visus failus nutolusiame serveryje;
2. Įdiegti taip vadinamo web-servero įrangą savo kompiuteryje, ir perţiūrėti projektus
lokaliai.
Pirmas variantas kainuoja pinigus, bet tada galėsite iš karto parodyti savo kūrybą draugams, o be
to, galėsite nusipirkti savo projektui domeną arba, liaudiškai tariant, svetainės adresą -
www.jususvetaine.lt. Talpinant viską lokaliai, projektai veiks būtent tik iš jūsų kompiuterio.
Web-hostingo paslaugos: ką pasirinkti?
Šia tema galima būtų parašyti atskirą ilgą mokslinį darbą. Nes internete yra daugybė įmonių,
siūlančių puslapių talpinimo paslaugas, ir sunku parekomenduoti kaţkokią vieną iš jų: viskas
priklauso nuo jūsų poreikių.
1. Hostingas pradedantiesiems - pora litų per mėnesį
Lietuvoje šiam momentui veikia tikrai nemaţai paslaugų tiekėjų, siūlančių patalpinti jūsų svetainę
praktiškai uţ centus. Na, jeigu kalbėti realiau, uţ litą ar kelis litus per mėnesį. Įveskite į Google
paiešką "web-hostingas 1 Lt" ir tikrai rasite ne vieną variantą. Privalumai - maţa kaina, greitas
uţsakymas, galimybė greitai atsiskaityti SMS ţinutėmis. Trūkumas - paslauga ne visada veikia
10
stabiliai, ir jeigu jums reikės pagalbos ar konsultacijos - sunku bus gauti pagalbos iš paslaugą
teikiančios kompanijos. Nes tai tiesiog neįeina į tą simbolinį 1 Lt mokestį.
Rekomenduoju šį variantą rinktis tiems, kurie tik pradeda savo paţintį su web-programavimu ir
nori pasitreniruodami sukurti kokį nors nedidelį asmeninį puslapį. Taip pat tokį web-hostingą
galima naudoti kaip "juodraštį" visokiems PHP kalbos funkcijų testavimams ir kitokiems
pasibandymams. O jeigu norite kurti rimtą projektą, kurį paleisite "gyvai" į pasaulį - tikrai
nesirinkite tokio pigaus talpinimo.
2. Rimtesnis hostingas - nuo keliolikos litų per mėnesį
Jeigu manote, kad jūsų projektams iš karto reikės daugiau disko vietos, didesnio lankytojų
duomenų srauto, el.pašto dėţučių ir kitų privalumų, tada reikia pasiţvalgyti į rimtesnes paslaugas
teikiančias įmones. Lietuvoje yra bent penkios rimtos įmonės, siūlančias patikimas hostingo
paslaugas. Tos paslaugos, iš esmės, panašios, ir priklausomai nuo poreikių, kainuos apie
keliolika litų per mėnesį ar daugiau, ir uţsakinėti reikės ilgesniam laikotarpiui, daţniausiai metams
ar bent pusmečiui. Taip pat galite iš jų uţsisakyti ir jau minėtą adresą savo svetainei, tai kainuos
apie 25-30 Lt per metus.
Kaip konkrečiai uţsakyti web-hostingo paslaugas - šioje knygoje nebus rašoma, bet, manau, kad
susigaudysite, nuėję į paslaugų tiekėjų tinklalapius arba susisiekę tiesiogiai su jais.
Uţsisakinėdami, atkreipkite dėmesį, kad į siūlomą planą įeitų PHP palaikymas bei MySQL
duomenų bazė.
2.3. Web-serveris lokaliame kompiuteryje
Jei nenorite kol kas niekur talpinti savo svetainės ar kaţko uţsakinėti uţ pinigus, galite visus
darbus su PHP atlikti tiesiog savo kompiuteryje. Tam tikslui reikia įdiegti tokius atskirus
11
produktus:
1. specialų web-serverį (daţniausiai tai yra Apache);
2. PHP sistemą;
3. MySQL duomenų bazės valdymo sistemą;
4. PhpMyAdmin - įrankį darbui su MySQL duomenų bazėmis.
Laimei, tai nėra taip sudėtinga - rinkoje yra paketų, kuriuose šios paminėtos sistemos apjungtos ir
diegiamos kartu.
Vienas iš tokių populiarių variantų yra XAMPP serveris. Jis yra nemokamas ir veikia visose
populiariose OS: Windows, Linux, Mac OS ir Solaris.
Jei trumpai, veikimo principas toks:
1. Parsisiunčiate XAMPP paketą ir tiesiog jį įdiegiate, per daug nesigilindami į nustatymus;
2. Tada, norėdami dirbti su PHP projektais, jūs kiekvieną kartą pasileisite tą XAMPP serverį;
3. Kai serveris bus įjungtas, jūs galėsite savo PHP failus saugoti lokaliai tam skirtame
specialiame kataloge, o testuosite, naršyklėje įvesdami adresą http://localhost/. O jei
norėsite dirbti su MySQL duomenų baze, įvesite
naršyklėjehttp://localhost/phpmyadmin.
Šioje knygoje aprašomus projektus testuosime lokaliai serveryje su XAMPP, bet visus PHP
tekstus galėsite lengvai galėsite nukopijuoti tiek į savo kompiuterį lokaliai, tiek į nutolusį serverį,
uţsisakę web-hostingo paslaugas.
Apibendrinimas
Šiame skyriuje trumpai aptarėme, ko reikia, norint pradėti rašyti PHP skriptus. Pirmiausia, reikia
pasirinkti, kokiame tekstiniame redaktoriuje rašysite kodą, o taip pat kur talpinsite savo skriptus ir
projektus - savo kompiuteryje lokaliai ar uţsisakysite web-hostingo paslaugas.
12
3. Darbas su PHP: pradžia
Demonstracinė programa - teksto išvedimas į ekraną
Šiame skyrelyje parodysime, kaip išvesti paprastą tekstą į ekraną, t.y. į interneto naršyklę. Be to,
pamatysite, kaip atrodo paprasčiausia PHP kalbos programa.
3.1. Pirmasis PHP skriptas
Kaip jau buvo minėta, PHP skriptas yra tiesiog paprastas tekstinis failas, tik jo plėtinys yra *.php ir
kodas atskiriamas specialiais bloko pradţios ir pabaigos simboliais. Paprasčiausias PHP skriptas
gali atrodyti taip:
<?php
echo “Labas rytas”;
?>
Šiuo atveju pirma eilutė reiškia PHP bloko atidarymą, antroje eilutėje iškviečiama komanda, kuri
išveda į ekraną tekstą “Labas rytas”, o trečioje eilutėje uţdaromas PHP blokas. Ir viskas, nereikia
rašyti nieko daugiau. Jeigu dirbame savo lokaliame web-serveryje, tai specialiame XAMPP
kataloge www sukuriame atskirą katalogą php ir ten išsaugojame šį tekstinį failą
kaippirmas.php. O tada naršyklėje įrašome http://localhost/php/pirmas.php. Pamatysime
maţdaug tokį vaizdą:
13
Kaip matote, jeigu norite išvesti tekstą į ekraną, tam reikia parašyti echo ir kabutėse jūsų norimą
tekstą. Atkreipkite dėmesį, kad kiekvienas sakinys PHP kalboje baigiasi kabliataškiu.
3.2. PHP ir HTML
Iš esmės, PHP skripto įvykdymo rezultatas yra HTML kalbos tekstas, kuris perduodamas
atvaizdavimui į naršyklę. Būtent dėl to į PHP skriptą gali būti rašomas HTML kodas ir šiaip
paprastas tekstas.
Pavyzdys:
<html>
<body>
Antroji programa <br />
<?php
echo “Labas rytas”;
echo “<h2>Labas vakaras</h2>”;
?>
</body>
</html>
Šis pavyzdys yra mišrus - išvedamas HTML kodas, jo viduje yra paprastas tekstas, o tada dar
ţemiau vykdomas PHP blokas, kuris irgi išveda tekstą į ekraną. Ir išvedamo teksto viduje irgi yra
HTML komanda, kurios rezultatus naršyklė sėkmingai atvaizduoja.
14
Jeigu tarp skaitančių yra tokių, kurie neţino kas yra HTML ar nemoka šios kalbos, tai
rekomenduoju pasidomėti ir pasiskaityti internete, nes HTML yra pagrindas, be kurio praktiškai
neįmanoma sukurti rimtesnės interneto svetainės.
3.3. Komentarai programose
Pakankamai daţnai reikia pačiame programos kode parašyti tekstinius komentarus,
paaiškinimus, kad būtų suprantama, ką daro vienas ar kitas kodo gabaliukas. Tam tikslui
reikalingi komentarai, kuriuos, vykdydamas PHP skriptą, interpretatorius tiesiog “praleis pro akis”,
tad ten galite rašyti tekstą laisva forma. Komentarus daţnai naudosime visoje knygoje, tad
įsidėmėkite, kaip jie gali būti rašomi, tam yra trys būdai.
1. Trumpas komentaras: rašomas eilutės pabaigoje - po dviejų pasvirųjų brūkšnių arba
simbolio #.
Pavyzdys:
$suma = $kaina * $kiekis; // skaičiuojame sumą
echo “Labas rytas”; # išvedame tekstą į ekraną
2. Ilgesnis komentaras: gali būti per kelias eilutes, rašomas tarp simbolių /* ir */
Pavyzdys:
echo $a * $b;
/*
Skaičiuojame A ir B sandaugą.
O po to išvedame ją į ekraną.
*/
Apibendrinimas
Šiame skyrelyje pamatėme, kaip atrodo paprasčiausias PHP kalbos skriptas. Taip pat suţinojome
apie sąsają tarp PHP ir HTML kalbų bei išsiaiškinome, kaip reikia rašyti komentarus PHP
programų kode.
15
4. Kintamieji ir matematika
Paprasti skaičiavimai su PHP bei jų rezultatai ekrane
Šiame skyrelyje papasakosime, kas yra kintamieji, kaip jie aprašomi PHP kalboje, kaip atliekami
matematiniai veiksmai su kintamaisiais ir kaip išvesti į ekraną kintamuosius kartu su tekstu.
4.1. Kintamieji ir darbas su jais
Praktiškai bet kokios programavimo kalbos pagrindas yra kintamieji. Ši sąvoka atėjo iš
paprasčiausios matematikos - mokykloje sprendţiame nelygybes kaip x + y = z, kur x, y ir z yra
kintamieji. Jiems priskiriamos reikšmės, arba tos reikšmės suţinomos bei uţpildomos tik
išsprendus lygtį. Panašiai ir programavime, tame tarpe ir PHP. Šiuo atveju kintamasis žymimas
dolerio ženklu prieš jo pavadinimą, pvz $x arba $y. Be abejo, galima ir patartina gavoti
prasmingesnius pavadinimus, pvz $svoris arba $telefonas.
Priskirti reikšmę kintamajam paprasta:
$kiekis = 9;
$kaina = 2.80;
$antraste = "Labas rytas, Lietuva";
$suma = $kiekis * $kaina;
Kaip matote, PHP kalboje kintamieji neturi savo tipo, skirtingai nuo kitų populiarių programavimo
kalbų. Ar kintamasis yra sveikasis skaičius, ar trumpena, ar eilutė - PHP interpretatorius nustato
pagal tai, kokia reikšmė kintamajam priskirta. Dar įdomiau tai, kad kintamasis skripto vykdymo
metu gali keisti savo tipą - vėlgi priklauso nuo jam priskirtos reikšmės. Tame yra ir pliusų, ir
minusų. Pranašumas yra tai, kad kintamųjų nereikia atskirai apibrėţti, deklaruoti ar grieţtai sekti
jų tipus. Tačiau tas pats gali ir pakišti koją - galite netyčia sudėti eilutę su skaičiumi, ir tada
programos vykdymo rezultatas gali būti neprognozuojamas, bet jūs sunkiai pastebėsite, kur įvyko
klaida. Tad patarimas - naudokite prasmingus kintamųjų vardus, tai labai padės jums patiems.
16
4.2. Matematinės operacijos
Taigi, ką galima veikti su kintamaisiais? Pradėkime nuo matematikos - tai visiškai nesudėtinga:
$suma = $a + $b;
$skirtumas = $a – $b;
$daugyba = $a * $b;
$dalyba = $a / $b;
$liekana = $a % $b;
Galima atskirai papasakoti apie paskutinį veiksmą - liekana. Jis pakankamai daţnai naudojamas
programavime, operacija % grąţina skaičių liekaną, kuri lieka po to, kai $a padalinama iš $b.
Pavyzdţiui, 10 % 4 = 2, o 3 % 2 = 1.
Taip pat viename reiškinyje gali būti supinti skaičiai ir kintamieji.
Pavyzdys:
$taksi_kaina = 2 + 1.25 * $kilometru_skaicius;
4.3. Kintamieji - tekstinės eilutės
O jeigu kintamieji yra ne skaičiai, o teksto eilutės, tai su jais galima atlikti labai įvairius veiksmus,
bet apie tai papasakosime atskirame skyrelyje. Pradţiai jums reikia ţinoti tik tai, kaip sudėti dvi
teksto eilutes į vieną kintamąjį. Tai atliekama su operacija "." (taškas), kuri reiškia dviejų eilučių
sąjungą.
Pavyzdys:
$zodis1 = "Labas";
$zodis2 = "rytas";
$tekstas_be_tarpo = $zodis1 . $zodis2;
$tekstas_su_tarpu = $zodis . " " . $zodis2;
4.4. Kintamųjų išvedimas į ekraną
Na ir, galiausiai, prie svarbiausio - kintamuosius, be abejo, galima pavaizduoti ekrane. Tai
atliekama su ta pačia komanda echo. Įdomu, kad vienoje komandoje galima išvesti kelis
kintamuosius, sujungiant juos taško operatoriumi.
17
Pavyzdţiai:
$tekstas = "Labas rytas";
echo $tekstas;
echo $tekstas . ", Lietuva!";
$kaina = 1.23;
$kiekis = 3;
$suma = $kaina * $kiekis;
echo "Suma: " . $suma . " Lt (" . $kaina . " Lt x" . $kiekis . ")";
Apibendrinimas
Šiame skyrelyje suţinojome, kas yra kintamieji ir kaip atlikti paprasčiausias operacijas su jais kaip
su skaičiais arba tekstinėmis eilutėmis, o taip pat - kaip išvesti kintamuosius į ekraną.
18
5. Darbas su teksto eilutėmis
Kokias PHP funkcijas galima panaudoti, dirbant su tekstu
Praėjusiame skyrelyje trumpai apţvelgėme kintamuosius, ir viena iš kintamųjų rūšių yra teksto
eilutės. Dabar apţvelgsime, ką įdomaus ir naudingo galima nuveikti su tekstiniais kintamaisiais.
5.1. Viengubos ir dvigubos kabutės
Eilučių reikšmių saugojimui gali būti naudojamos ir dvigubos kabutės, ir viengubos (apostrofai).
Koks gi skirtumas? Jeigu jūsų teksto eilutėje tarp dvigubų kabučių bus nurodytas kintamasis su $
ţenklu, tai PHP interpretuos jį kaip reikšmę, ir įrašys tą reikšmę vietoj kintamojo pavadinimo.
Pavyzdys:
$kaina = 3.14;
echo "Kaina parduotuvėje buvo $kaina Lt";
Tekstines eilutes PHP kalboje galima saugoti ir tarp viengubų kabučių - su apostrofo ţenklais: ' '.
Tačiau šiuo atveju kintamieji tarp tų kabučių nebus pakeičiami į reikšmes, o tiesiog išvedamas
kintamojo vardas.
$kaina = 3.14;
echo 'Kaina parduotuvėje buvo $kaina Lt';
Taip pat reikia atkreipti dėmesį į tokius atvejus, kai pačioje eilutėje reikia panaudoti viengubas ar
dvigubas kabutes. Jeigu tarp viengubų kabučių reiia įterpti dvigubas, arba atvirkščiai, tai nieko
blogo neįvyksta.
$kintamasis = 'Kauno "Ţalgiris" laimėjo varţybas';
$kintamasis = "Kauno 'Ţalgiris' laimėjo varţybas";
19
Bet jeigu tame pačiame kintamajame naudosite tas pačias kabutes, bus negerai:
$kintamasis = "Kauno "Ţalgiris" laimėjo varţybas";
Ši eilutė bus interpretuojama kaip klaidinga, ir skriptas nebus vykdomas, o ekrane bus parodyta
klaida:
Kad taip neįvyktų, prieš kabutes pačioje reikšmėje reikia parašyti \ ţenklą:
$kintamasis = "Kauno \"Ţalgiris\" laimėjo varţybas";
5.2. Funkcijos darbui su tekstais
Darbas su tekstinėmis eilutėmis yra tikrai daţnas reiškinys programavime, dėl to PHP kalboje yra
paruošta tikrai daug naudingų funkcijų, kurias galima panaudoti.
Štai pavyzdţiai:
$eilute = " labas rytas, Lietuva! ";
$ilgis = strlen($eilute);
// funkcija strlen grąţina eilutės simbolių skaičių. Šiuo atveju - 23.
$eilute_be_tarpu = trim($eilute);
// funkcija trim grąţina eilutę be tarpų pradţioje ir pabaigoje
$didziosios_raides = strtoupper($eilute);
// strtoupper - pakeičia visas raides į didţiąsias
$mazosios_raides = strtolower($eilute);
// strtolower - pakeičia visas raides į maţąsias
$pavadinimas = ucfirst($eilute);
// ucfirst - pakeičia pirmąją eilutės raidę į didţiąją
$tekstas = str_replace("Lietuva", "Latvija", $eilute);
// str_replace šiuo atveju pakeičia "Lietuva" į "Latvija"
20
$zodis = substr($eilute, 1, 5);
// substr grąţina ţodţio dalį - penkis simbolius, pradedant nuo antrojo
Čia tik keletas iš daţniausiai naudojamų funkcijų, su visomis eilučių funkcijomis galima susipaţinti
oficialiajame PHP puslapyje: http://www.php.net/manual/en/ref.strings.php
Kaip matome, funkcijos yra iškviečiamos taip: pavadinimas ir skliausteliuose parametrai per
kablelį. Nebūtina funkcijos rezultato priskirti kaţkokiam kintamajam - galima jį naudoti iš karto
kitiems tikslams:
echo strlen($eilute);
echo strtoupper($eilute) . " " . strtolower($eilute);
Vėliau apie funkcijas pakalbėsime atskirai ir plačiau – ne tik apie PHP funkcijų panaudojimą, bet ir
savo naudingų funkcijų sukūrimą.
Apibendrinimas
Šiame skyrelyje pamatėme, kuo skiriasi dvigubos kabutės nuo viengubų kabučių, o taip pat
suţinojome apie daţniausiai naudojamas PHP funkcijas darbui su eilutėmis.
21
6. Sąlygos sakiniai
Sprendimų priėmimas arba kas būtų, JEIGU būtų...
Pakankamai daţnai programa turi elgtis vienaip arba kitaip, priklausomai nuo kaţkokiu sąlygų.
Kalbant paprasčiau: jeigu [kaţkas] - tai reikia atlikti vieną veiksmą, priešingu atveju - kitą veiksmą.
Šiame skyrelyje suţinosime, kaip visa tai aprašoma PHP kalboje.
6.1. IF .. ELSE
Sąlygai aprašyti skirtas paprasčiausias angliškas ţodelis IF. Bendro pavidalo sąlygos sakinys
atrodo taip:
if (sąlyga) {
// atliekamas veiksmas 1
} else {
// atliekamas veiksmas 2
}
Konkretus pavyzdys:
$eilute = "Labas rytas, labas rytas ir dar kartą labas rytas";
$eilute2 = "Labas rytas tik du kartus";
$ilgis = strlen($eilute);
If ($ilgis > 20) {
echo "eilutė ilgesnė uţ 20 simbolių (".$ilgis.")";
} else {
echo "eilutė trumpesnė uţ 20 simbolių (".$ilgis.")";
}
22
Kaip matote, sąlyga yra nurodoma skliaustuose, ir jei ji teisinga, tada vykdomas pirmasis veiksmų
blokas, o po ţodelio ELSE rašomi veiksmai, kuriuos reikia atlikti priešingu atveju, jei sąlyga
netenkinama. ELSE blokas šiaip yra nebūtinas. Kitaip tariant, jei sąlygą patenkinta, tai vykdyti
veiksmą, o priešingu atveju nedaryti nieko, tai tuo atveju ELSE blokas yra visai nerašomas.
Kiekvienas veiksmų blokas yra rašomas tarp figūrinių skliaustų { }. Jeigu bloke yra tik vienas
sakinys, tada tokie skliaustai nėra būtini:
if ($ilgis > 20) echo "Ilgis didesnis uţ 20";
Bet dėl tvarkingumo rekomenduoju skliaustus visada rašyti net ir vienam sakiniui, nes taip bus
lengviau perskaityti kodą ir atskirti jo dalis, ypač jei sąlygos sakinys yra gana sudėtingas.
Sudėtingesniu atveju gali būti keletas veiksmų blokų, t.y. daugiau negu du. Tada visa konstrukcija
atrodo taip:
if ($taskai == 1) {
echo "Baudos metimas";
} else if ($taskai == 2) {
echo "Dvitaškis";
} else if ($taskai == 3) {
echo "Tritaškis";
} else {
echo "Nepataikė";
}
6.2. Kokios gali būti sąlygos
Atskirai reikia išnagrinėti, kokie patikrinimai gali būti tarp skliaustų ( ) sąlygos bloke. Jau matėte
du variantus, kuriuose palyginami skaičiai:
if ($ilgis > 20) // ar kintamasis $ilgis didesnis uţ 20
if ($taskai == 1) // ar kintamasis $taskai lygus 1
Atkreipkite dėmesį, kad palyginimui rašomas ne vienas lygybės ţenklas, o DU lygybės ţenklai.
Vienas ţenklas reiškia reikšmės priskyrimą. Nepainiokite šių dviejų dalykų, nes tai yra viena iš
daţniausių pradedančiųjų programuotojų klaidų, ir ją labai sunku po to pastebėti ar sugaudyti, nes
programa įvykdoma, rezultatai neteisingi, ir galiausiai sėdi kelias valandas, ieškodamas klaidos, o
po to reikia rautis plaukus, nes netikslumą lėmė tiesiog parašytas vienas lygybės ţenklas vietoje
dviejų.
23
Tačiau sąlygos gali būti ir sudėtingesnės, susidedančios iš dviejų ar daugiau atskirų sąlygų arba
neiginių. Pavyzdţiai:
if ($ilgis == 3 && $plotis == 4) { echo "statusis trikampis"; }
// operatorius && - "IR"
if ($numeris == 1 || $numeris == 2) { echo "vienas arba du"; }
// operatorius || - "ARBA"
if ($numeris != 1) { echo "nelygu vienetui"; }
// operatorius != - "NELYGU"
if ($numeris >= 1) { echo "daugiau arba lygu 1"; }
// operatorius >= - "DAUGIAU ARBA LYGU"
Taip pat atskirai reikia paminėti dar vieną operatorių - grieţtą lygybę arba trigubą lygybę ===. Jos
pagalba galima patikrinti ne tik, ar kintamieji yra lygūs bet ar jie to paties tipo - skaičiai, eilutės ir
kt.
Pavyzdys:
$ilgis = 3;
if ($ilgis === 3) { echo "lygu"; }
// kintamasis $ilgis yra skaičius
$ilgis = "3";
if ($ilgis === 3) { echo "lygu"; }
// kintamasis $ilgis nėra skaičius, sąlyga nebus patenkinama
6.3. Operatorius SWITCH .. CASE
Įsivaizduokite, kad jums reikia išrašyti 10 skirtingų variantų su sąlygos sakiniais. Taip, tai galima
padaryti, rašant ilgą IF.. ELSE struktūrą:
if ($vieta == 1) { echo "Pirma vieta"; }
else if ($vieta == 2) { echo "Antra vieta"; }
else if ($vieta == 3) { echo "Trečia vieta"; }
// ... dar kitos sąlygos
else if ($vieta == 10) { echo "Dešimta vieta"; }
else { echo "Nebaigė trasos"; }
Tačiau yra ir patogesnis būdas. Tokiam išvardinimo procesui naudojamas operatorius SWITCH..
CASE. Jo pagalba galima tiesiog išvardinti kiekvieną galimą reikšmę, ir atskirai apdoroti kiekvieną
iš jų. Šio operatoriaus uţrašymas atrodo taip:
24
switch ($vieta) {
case 1: echo "Pirma vieta"; break;
case 2: echo "Antra vieta"; break;
case 3: echo "Trečia vieta"; break;
// ... dar kitos sąlygos
case 10: echo "Ketvirta vieta"; break;
default: echo "Nebaigė trasos"; break;
}
Kaip matote, skliausteliuose parašomas kintamasis arba kitoks reiškinys, o tada
kiekvienoje case eilutėje nurodoma jo reikšmė, ir po dvitaškio - kokie veiksmai turi būti atliekami,
esant tai reikšmei. Veiksmų gali būti daugiau negu vienas, ir jie turi pasibaigti ţodeliu break;.
Taip pat atkreipkite dėmesį į default: tas blokas bus vykdomas tada, jeigu kintamojo reikšmė
nesutaps nei su vienu iš išvardintų skaičių.
Apibendrinimas
Šiame skyrelyje suţinojome, kaip parašyti sąlygos sakinius: JEIGU [sąlyga], TAI [atlikti
veiksmus]. Pamatėme, kokia yra tokių sakinių sintaksė bei kokios gali būti sudėtingesnės
sąlygos.
25
7. Ciklai
Kaip su keliomis kodo eilutėmis atlikti tūkstančius pasikartojančių veiksmų
Kompiuteriai iš esmės buvo sukurti tam, kad galėtų atlikti sudėtingas ir pasikartojančias
skaičiavimo operacijas, kurios ţmogui sugaištų per daug laiko. Nuo tada praėjo daug laiko, bet
poreikis atlikti cikliškus veiksmus išliko, ir ciklai yra viena iš pagrindinių bet kokios programavimo
kalbos konstrukcijų. Paţvelkime, kaip jie atrodo PHP kalboje.
Ciklai kaţkuo panašūs į sąlygos sakinius, kuriuos aptarėme praeitame skyrelyje. Tik skirtumas
toks, kad ten JEIGU [tenkinama sąlyga], TAI [vykdomas veiksmas], tai ciklų atveju yra kitaip: KOL
[tenkinama sąlyga], TOL [vykdomas veiksmas]. Tokiu būdu veiksmas atliekamas N kartų - tiek,
kiek jums reikia arba iki tol, kol sąlyga nebebus patenkinama. PHP kalboje praktiškai yra keturi
ciklai: WHILE, atvirkščias DO .. WHILE, tada FOR ir FOREACH. Apţvelgsime kiekvieną iš jų
atskirai.
7.1. Ciklas WHILE
Šis variantas tiesiogiai atitinka aukščiau išdėstytą atvejį:
KOL [tenkinama sąlyga], TOL [vykdomas veiksmas].
Schematiškai tai atrodo taip:
while (TENKINAMA SĄLYGA) {
// atliekami veiksmai
}
26
Paprastas pavyzdys:
$valanda = 0;
while ($valanda <= 24) {
echo $valanda . "-a valanda<br />";
$valanda = $valanda + 1;
}
27
Paprastai kalbant, šis ciklas atlieka štai ką: KOL valandos yra maţiau arba lygu uţ 24, TOL
išvedame į ekraną valandų skaičių ir pridedame prie valandos vienetą. Po kiekvieno veiksmų
bloko { } įvykdymo yra tikrinama ciklo sąlyga, ir jei ji vis dar teisinga, tada vėl grįţtama prie
veiksmų bloko vykdymo, o jeigu neteisinga, tai ciklo darbas baigiamas.
Kaip jau galbūt supratote, ciklo viduje veiksmų bloke jūs turite atlikti kaţką, kas pakeičia ciklo
sąlygos teisingumą. Priešingu atveju ciklas gali niekada nesibaigs, operacijos bus atliekamos
neribotą laiką, o tai labai negerai, šis reiškinys vadinamas "amţinu ciklu". Web-serveryje yra
nustatytas skripto vykdymo laiko ribojimas, kuris daţniausiai yra lygus 30 sekundţių. Tad jeigu
taip atsitiks, kad jūs parašysite "amţiną ciklą", tada po 30 sekundţių naršyklės lange pasirodys
pasirodys klaidos tekstas panašus į "Maximum execution time exceeded".
Dar atskirai reikia paminėti matematinius operatorius ++ ir --. Jie daţnai naudojami cikluose ir
veikia kaip sutrumpinimai operacijoms "pridėti vienetą" ir "atimti vienetą". Aukščiau cikle
parašytas sakinys gali būti sutrumpintas taip:
$valanda++; // tai yra tas pats, kas $valanda = $valanda + 1;
7.2. Atvirkščias ciklas DO .. WHILE
Tas pats ciklas gali būti naudojamas atvirkščiai - sąlyga gali būti ne pradţioje ciklo, o jo
pabaigoje. Schematiškai:
do {
// atliekami veiksmai
} while (TENKINAMA SĄLYGA);
Tas pats viršutinis pavyzdys:
$valanda = 0;
do {
echo $valanda . "-a valanda<br />";
$valanda = $valanda + 1;
} while ($valanda <= 24);
Jeigu jums teko programuoti su PASCAL kalba, tai ciklas DO.. WHILE yra kaţkiek panašus į
Pascal kalbos ciklą REPEAT .. UNTIL.
28
7.3. Ciklas FOR
Be ciklo WHILE, yra ir kitokio tipo ciklas FOR. Jis truputį sudėtingesnis ir reikalingas kitaip
apibrėţiant ciklo sąlygas. Schematiškai jo uţrašymas yra toks:
for ([PRADŢIOS SĄLYGA]; [PRATĘSIMO SĄLYGA]; [ITERACIJOS VEIKSMAS]) {
// atliekami veiksmai
}
Atrodo sudėtingai, bet paţiūrėkime į pavyzdį.
Sakykime, reikia pavaizduoti pasirinkimo "dropdown" lauką, kuriame pateikiami variantai nuo 1 iki
100. Tada kodas atrodo taip:
echo "<select name='pasirinkimas'>";
for ($i=1; $i <= 100; $i++) {
echo "<option value=$i>$i</option>";
}
echo "</select>";
FOR ciklas susidaro iš trijų dalių: pradinės sąlygos, ciklo pratęsimo sąlygos bei veiksmo po
kiekvienos iteracijos.
Šiame pavyzdyje pradinė sąlyga yra, kad $i=1, ir po kiekvienos iteracijos daroma $i++.
O ar pratęsti ciklą toliau, tikrina sąlyga $i <= 100.
29
Jeigu konkrečiau, tai pradţioje kintamajam priskiriama reikšmė 1, tada įvykdomas ciklo veiksmas
(echo), tada pridedamas vienetas ir tikrinama, ar reikšmė maţesnė uţ 100. Jei taip, tai tada
veiksmai kartojami. Iki tol, kol nebus tenkinama sąlyga $i <= 100 arba, ūkiškai tariant, kai $i taps
101 ar daugiau.
7.4. Ciklas FOREACH
Taip pat yra sukurtas ciklas FOREACH, skirtas palengvinti darbą su masyvais. Kadangi masyvus
aptarinėsime kitame skyrelyje, tai čia tik paminėsiu šio ciklo uţrašymo būdą schematiškai. Yra du
būdai:
foreach (MASYVAS as MASYVO_ELEMENTAS) {
// atliekami veiksmai su masyvo elementu
}
arba
foreach (MASYVAS as RAKTAS => REIKŠMĖ) {
// atliekami veiksmai su raktu ir/arba reikšme
}
Prie šio ciklo detaliau grįšime, nagrinėdami masyvus.
Apibendrinimas
Šiame skyrelyje pamatėme, kas yra ciklai ir kaip jie yra uţrašomi PHP kalboje. Tiek WHILE, tiek
FOR yra daţnai naudojamos konstrukcijos, kurių panaudojimą iš praktinės pusės mes
uţtvirtinsime vėliau kituose skyreliuose.
30
8. Masyvai
Viename kintamajame galima saugoti daug reikšmių
Įsivaizduokite, kad jums reikia išsaugoti ir apdoroti didelį duomenų kiekį. Sakykime, reikia kaţkur
išsaugoti visų klasės mokinių kontrolinio paţymius. Galima, be abejo, padaryti tai per daug
kintamųjų:
$petriukas = 10;
$maryte = 8;
$blogas_mokinys = 2;
Bet taip yra nepatogu, juk tada, skaičiuojant klasės vidurkį, reikės atlikti veiksmus su kiekvienu
kintamuoju. Čia į pagalbą ateiną kintamųjų masyvai, kurie leidţia išsaugoti daug tos pačios
struktūros duomenų viename kintamajame.
8.1. Kaip saugoti duomenis masyvuose
Masyvuose saugomi duomenys turi pavidalą raktas-reikšmė, iš praeito pavyzdţio mokinių vardai
yra raktai, o jų paţymiai - reikšmės. Kaip tai įrašyti į masyvą:
$pazymiai['petriukas'] = 10;
$pazymiai['maryte'] = 8;
$pazymiai['blogas_mokinys'] = 2;
Raktai gali būti ir paprasti skaičiai:
$pazymiai[0] = 10;
$pazymiai[1] = 8;
$pazymiai[2] = 2;
31
8.2. Kaip sukurti masyvą
Bendru atveju sukurti masyvą galima paprastu sakiniu:
$masyvas = array();
Bet toks sukūrimas nėra privalomas, galima tiesiog įrašyti reikšmes į kintamąjį, o PHP
interpretatorius pats "supras", kad tas kintamasis yra masyvas.
Dar kitas būdas sukurti masyvą yra iš karto priskiriant reikšmes elementams. Sakykime, jei
norime masyvo, aprašančio, kiek grupėje studentų yra iš įvairių Lietuvos miestų, galima tai
aprašyti taip:
$studentai = array("Vilnius" => "15", "kaunas" => "10", "vievis" => 5);
O jeigu tokiame pačiame pavyzdyje norite saugoti tik skaičius iš eilės, nesaugodami konkrečių
miestų, tai masyvo sukūrimas yra dar paprastesnis:
$stud = array(15, 10, 5);
// tai yra tas pats kas $stud[0] = 15; $stud[1] = 10; $stud[2] = 5;
Atkreipkite dėmesį, kad bendru atveju masyvo elementų skaičiavimas prasideda ne nuo 1, o nuo
0. Tai bus svarbu, apdorojant informaciją masyvuose.
O jeigu jau turite uţpildytą masyvą ir norite pridėti dar vieną elementą, tai tiesiog parašykite taip:
$stud[] = 8;
// reikšmė įrašoma, pridedant prie paskutinio rakto +1: $stud[3] = 8;
Viena svarbiausių ir daţniausiai naudojamų masyvų funkcijų yra count($masyvas), kuri grąţina
elementų skaičių tame masyve.
Pavyzdys:
$masyvas = array(10, 8, 9, 7);
$masyvas[] = 2;
echo count($masyvas);
// į ekraną bus išvestas skaičius 5, nes masyve yra penki elementai
32
8.3. Vidurkio skaičiavimas: masyvo apdorojimas cikle FOR
Taip, šiek tiek panagrinėjome teoriją, o dabar - praktinis pavyzdėlis. Paskaičiuokime klasės
paţymių vidurkį, kai visi paţymiai yra saugomi masyve. Kadangi skaičiuojame vidurkius, tai
konkrečių mokinių vardai yra nesvarbūs, svarbiausi yra paţymiai. Tuo pačiu kode panaudosime
ciklą FOR, apie kurį buvo rašyta praeitame skyrelyje.
Taigi:
$pazymiai = array(10, 8, 7, 2, 4, 10, 9, 8, 7, 5, 6, 7, 8, 9, 10, 3);
// uţpildome duomenis
$suma = 0; // paţymių suma - pradţioje ji lygi nuliui
$pazymiu_skaicius = count($pazymiai); // kiek iš viso turime paţymių
for ($i=0; $i < $pazymiu_skaicius; $i++) {
$suma = $suma + $pazymiai[$i];
// prie sumos pridedame einamąjį paţymį su elementu $i
}
$vidurkis = $suma / $pazymiu_skaicius; // skaičiuojame vidurkį
echo $vidurkis; // rodomas galutinis atsakymas
Teisingumo dėlei, galima paminėti, kad yra speciali funkcija masyvo elementų vidurkio
skaičiavimui, bet šiame pavyzdyje norėjau parodyti, kaip tai galima padaryti, panaudojant ciklą.
8.4. Masyvai su tekstiniais raktais: ciklas FOREACH
Darbui su masyvais yra sukurtas specialus ciklas, kuris vadinasi FOREACH. Jis tinkamas naudoti
tada, kai masyvo elementai yra ne skaičiai, o ţodţiai. Pavyzdţiui, jeigu norite į ekraną išvesti
paţymius kartu su mokinių vardais:
$pazymiai['petriukas'] = 10;
$pazymiai['maryte'] = 8;
$pazymiai['blogas_mokinys'] = 2;
foreach ($pazymiai as $vardas => $pazymys) {
echo $vardas . " - " . $pazymys . "<br />";
}
Kaip matome, FOREACH uţrašymas yra toks: foreach ($masyvas as $raktas => $reiksme).
Kitaip tariant, ciklas tiesiog pereina per visus masyvo elementus, kiekvieną elementą įrašydamas
į du kintamuosius - į rakto kintamąjį ir reikšmės kintamąjį. O ciklo viduje jūs jau sprendţiate, ką
daryti su tais dviem kintamaisiais.
33
8.5. Pagalbinės funkcijos darbui su masyvais
Jau matėte, kaip veikia funkcija count(), skaičiuojanti masyvo elementus. Bet be jos yra dar
daugybė naudingų funkcijų, kurias galima panaudoti su masyvais.
Parodysime su pavyzdţiais:
$pazymiai = "10,8,9,7";
$masyvas = explode(",", $pazymiai);
// explode: skaido eilutę į elementus pagal kablelį ir įrašo į masyvą
$masyvas = array(1,2,3,4,5);
$eilute = implode("-" , $masyvas);
// implode: sudaro eilutę iš masyvo elementų, atskirdamas brūkšniu
$masyvas = array(9,8,7,9,5,2,8);
if (in_array(10, $masyvas)) { echo "Yra dešimtukų"; }
// in_array: tikrina, ar masyve yra nurodyta reikšmė
sort($masyvas);
// surūšiuoja masyvo elementus didėjančia tvarka
Apibendrinimas
Skyrelyje suţinojome, kas yra masyvai, kaip juos sukurti ir saugoti juose duomenis. Priklausomai
nuo to, ar masyvo raktai yra skaičiai ar tekstinės eilutės, su jais galima atlikti daugybę veiksmų,
tam į pagalbą daţnai ateina ciklai bei masyvams skirtos funkcijos.
34
9. Skripto parametrai: $_GET masyvas
Perduodame reikšmes per puslapio URL adresą
Šis trumpas skyrelis yra labai svarbus - jame suţinosite, kaip į kintamuosius perduoti parametrus,
tiesiog įrašant juos kartu su puslapio adresu naršyklėje. Ir tada toliau su tais kintamaisiais galima
daryti, ką tik norite.
9.1. Kaip su PHP gauti reikšmes iš URL adreso eilutės
Ar neteko kada naršyklėje pamatyti ilgą adresą, panašų į tokį kaip pavyzdyje viršuje:
http://www.manopuslapis.lt/index.php?veiksmas=straipsniai&id=25&metai=2011
Būtent tame adrese ir slypi kintamieji su reikšmėmis. Išnagrinėkime adreso dalis:
- http://www.manopuslapis.lt/ - domeno pavadinimas
- index.php - konkretaus PHP skripto pavadinimas
- ?veiksmas=straipsniai&id=25&metai=2011 - skripto parametrai
Mus labiausiai domina trečia dalis. Viskas, kas parašyta po klaustuko ţenklo, yra parametrai,
kurie vienas nuo kito atskirti ţenklu &.
Taigi, šiuo atveju turime tris parametrus:
- veiksmas = straipsniai (kokia tinklalapio skiltis yra aktyvi)
- id = 25 (straipsnio ID numeris)
- metai = 2011 (straipsnio parašymo metai)
Dabar kitas klausimas - o kaipgi pačiame PHP skripte paimti tas reikšmes. Tam skirtas masyvas
pavadinimu $_GET. Būtent į jį yra įrašomi tie parametrai su reikšmėmis. Paţiūrėkite:
echo "Veiksmas: " . $_GET['veiksmas'] . "<br />";
echo "Straipsnio ID: " . $_GET['id'] . "<br />";
echo "Straipsnio metai: " . $_GET['metai'] . "<br />";
35
Ekrane pasirodo mūsų parašyti tekstai ir jau minėtų trijų parametrų reikšmės.
9.2. Pavyzdys - pasirinkto sąrašo elemento priskyrimas
Kad būtų lengviau įsisavinti, paimkime pavyzdį. Tarkime, jūsų puslapyje yra pildoma forma,
kurioje yra laukas "Gimimo metai". Bet jūs tuos metus ţinote iš anksto ir galite perduoti per
naršyklėje įrašomą adresą, ir tada formoje metai bus parinkti automatiškai, ir vartotojui nereikės
pildyti metų iš naujo. Taigi, kodas būtų toks:
$metai = $_GET['metai'];
echo "<form>";
echo "<select name=metai>";
for ($m = 1900; $m <= 2011; $m++) {
echo "<option value=" . $m;
if ($metai == $m) { echo " selected=selected"; }
echo ">$m</option>";
}
echo "</select>";
echo "</form>";
36
Toks vaizdas pasirodo, jeigu naršyklės adrese mes įrašome kaip parametrą metai=1905.
Apibendrinimas
Naršyklėje rašomas adresas yra vienas iš būdų perduoti parametrus PHP skriptui, kuriuos kode
galima naudoti kaip kintamuosius. Visa tai daroma per $_GET masyvą, į kurio elementus ir
įrašomi parametrai iš adreso eilutes.
37
10. Praktinė užduotis: loterija "Loto 6"
Pabandykime atspėti skaičius ir automatiškai sugeneruoti lošimą
Loterijos visada buvo labai įdomus įvykis ţmonėms. Pabandykime mes sukurti savo loteriją pagal
taisykles, kurias siūlo loterija pavadinimu "Loto 6", jos lošimus kaţkada rodė per vieną iš TV
kanalų. Tuo pačiu uţtvirtinsime savo turimas ţinias iš pirmųjų skyrių bei pakartosime kai kurią
teoriją.
10.1. Sąlygos
Vyksta loterija, kurios metu išridenami 6 skaičiai, kiekvienas iš jų yra vienţenklis - nuo 0 iki 9.
Skaičiai gali kartotis ir tarpusavyje nesusiję. Lošėjas viename biliete bando spėti visą šešetuką.
Jeigu atspėja visus šešis skaičius (pagal jų pozicijas), tada laimi didįjį prizą. Minimaliam
laimėjimui uţtenka atspėti 2 skaičius.
Užduotis: parašyti PHP skriptą, kuriam iš naršyklės adreso eilutės paduodami parametrai - šeši
skaičiai, kuriuos spėja lošėjas. Skriptas sugeneruoja lošimą - šešis skaičius atsitiktine tvarka - ir
parodo ekrane visus skaičius, kiek iš jų atspėta bei koks yra laimėjimas.
10.2. Etapas 1. Parametrų nuskaitymas
Kaip jau buvo minėta, spėjimas vykdomas per adreso eilutę, ten įrašant skaičius. Padarykime
prielaidą, kad adresas bus formuojamas pagal tokią taisyklę:
http://www.jususvetaine.lt/index.php?x1=0&x2=0&x3=0&x4=0&x5=0&x6=0
Kur x1, x2, x3, x4, x5 ir x6 yra parametrai, kuriuos mums ir reikia nuskaityti. Įrašykime tuos
skaičius į masyvą. Tai galima padaryti su vienintele kodo eilute.
$spejimas = array($_GET[„x1‟], $_GET[„x2‟], $_GET[„x3‟], $_GET[„x4‟],
$_GET[„x5‟],$_GET[„x6‟]);
38
Tačiau nepamirškime patikrinimo saugumo sumetimais. Juk mes nesame tikri, ar adreso eilutėje
bus įvesti skaičiai ir ar tikrai nebus klaidų. Dėl to kiekvieną kintamąjį reikia patikrinti, ar tai yra
skaičius nuo 0 iki 9. Čia pirmą kartą panaudosime funkciją is_int(), kuri tikrina, ar kintamasis yra
sveikasis skaičius.
$spejimas = array();
if (is_int($_GET['x1']) && $_GET['x1'] <= 9) {
$spejimas[] = $_GET['x1'];
}
if (is_int($_GET['x2']) && $_GET['x2'] <= 9) {
$spejimas[] = $_GET['x2'];
}
if (is_int($_GET['x3']) && $_GET['x3'] <= 9) {
$spejimas[] = $_GET['x3'];
}
if (is_int($_GET['x4']) && $_GET['x4'] <= 9) {
$spejimas[] = $_GET['x4'];
}
if (is_int($_GET['x5']) && $_GET['x5'] <= 9) {
$spejimas[] = $_GET['x5'];
}
if (is_int($_GET['x6']) && $_GET['x6'] <= 9) {
$spejimas[] = $_GET['x6'];
}
10.3. Etapas 2. Lošimo generavimas
Čia truputį sudėtingiau. Mums reikia sukurti tuščią masyvą, o tada šešis kartus įvykdyti ciklą,
kuriame bus generuojamas atsitiktinis skaičius. Kiekvieną iš jų įrašysime į masyvą, bei
patikrinsime su spėjimo masyvo elementu - jeigu sutampa, tai padidinsime teisingų skaičių
kintamąjį vienetu.
$atspeta = 0;
$losimas = array();
for ($i=0; $i <= 5; $i++) {
$skaicius = rand(0,9); // rand() - atsitiktinis skaičius tarp 0 ir 9
$losimas[] = $skaicius;
if ($skaicius == $spejimas[$i]) { $atspeta++; }
}
39
Prisiminkite, kad PHP kalboje masyvų numeravimas prasideda nuo 0, o ne nuo 1, tad ir ciklas
vykdomas nuo 0 iki 5 pozicijų.
10.4. Etapas 3. Informacijos išvedimas į ekraną
Na čia jau galima išvesti viską pagal jūsų fantaziją. Siūlau tokį variantą - išvedame spėjamus
skaičius, tada lošimo skaičius ir galiausiai rezultatus - kiek skaičių atspėta ir ar bilietas laimėjo.
echo "Spėjami skaičiai: " . implode(" ", $spejimas) . "<br />";
echo "Lošimo skaičiai: " . implode(" ", $losimas) . "<br />";
echo "Atspėta skaičių: " . $atspeta . "<br />";
if ($atspeta >= 2) {
echo "Jūs laimėjote";
} else {
echo "Jūs nelaimėjote";
}
10.5. Etapas 4. Pilnas skripto PHP kodas ir užduoties pasunkinimas
Štai ir viskas, programa realizuota. Bet norisi ją šiek tiek paįvairinti. O kas būtų, jeigu lošimų būtų
ne 1, o 10? Arba 100? Parašykime dar vieną ciklą tam tikslui. Pilnas programos kodas atrodo štai
taip:
$spejimas = array();
if (is_int($_GET['x1']) && $_GET['x1'] <= 9) {
$spejimas[] = $_GET['x1'];
}
if (is_int($_GET['x2']) && $_GET['x2'] <= 9) {
$spejimas[] = $_GET['x2'];
}
if (is_int($_GET['x3']) && $_GET['x3'] <= 9) {
$spejimas[] = $_GET['x3'];
}
if (is_int($_GET['x4']) && $_GET['x4'] <= 9) {
$spejimas[] = $_GET['x4'];
}
if (is_int($_GET['x5']) && $_GET['x5'] <= 9) {
$spejimas[] = $_GET['x5'];
}
40
if (is_int($_GET['x6']) && $_GET['x6'] <= 9) {
$spejimas[] = $_GET['x6'];
}
$losimu_skaicius = 100;
$laimingi_bilietai = 0;
for ($losimai=1; $losimai <= $losimu_skaicius; $losimai++) {
$atspeta = 0;
$losimas = array();
for ($i=0; $i <= 5; $i++) {
$skaicius = rand(0,9);
// funkcija rand() grąţina atsitiktinį skaičių,
// šiuo atveju intervale 0-9
$losimas[] = $skaicius;
if ($skaicius == $spejimas[$i]) { $atspeta++; }
echo "Spėjami skaičiai: " . implode(" ", $spejimas) . "<br />";
}
echo "Lošimo skaičiai: " . implode(" ", $losimas) . "<br />";
echo "Atspėta skaičių: " . $atspeta . "<br />";
if ($atspeta >= 2) {
echo "Jūs laimėjote";
$laimingi_bilietai++;
} else {
echo "Jūs nelaimėjote";
}
}
echo "<hr />";
echo "Laimingų bilietų: " . $laimingi_bilietai;
Taigi, ekrane gausime kiekvieno lošimo statistiką bei pačioje pabaigoje - kiek bilietų laimėjo iš
visų lošimų, jeigu skaičiuotume, kad kiekvienam lošimui turėjome tik vieną bilietą su tais pačiais
skaičiais.
Apibendrinimas
Šiame pakankamai paprastame pavyzdyje buvo beveik visos struktūros, kurios buvo aptartos
pirmuose skyreliuose - kintamieji, sąlygos sakiniai, ciklai, masyvai, $_GET parametrai ir kt. Taip
glaustai pakartojome visas tas temas ir galime judėti toliau prie sudėtingesnių temų.
41
11. Formos ir jų apdorojimas
Jei norite, kad vartotojai jūsų puslapyje pildytų informaciją
Internetas nebūtų toks interaktyvus, jei ţmonės galėtų ten tik skaityti informaciją, bet negalėtų
patys jos pildyti. Būtent vartotojų veiksmams ir reikalingos taip vadinamos formos, kurių duomenis
gali apdoroti PHP skriptai. Paţiūrėkime, kaip tai daroma.
11.1. HTML: formos sukūrimas
Pradėkime nuo to, kad formą reikia sukurti, tai yra daroma visiškai ne su PHP kalba, o su HTML.
Papasakosime, kaip tai daroma.
Sakykime, kad norime sukurti registracijos formą iš tokių laukų: vardas, el.pašto adresas, gimimo
metai ir ar norite gauti naujienas.
Atrodys forma daugmaţ taip:
42
Tokio vaizdo HTML kodas:
<form action="rezultatas.php" method="post">
Vardas: <input type="text" name="vardas" />
<br /><br />
El.pašto adresas: <input type="text" name="pastas" />
<br /><br />
Gimimo metai:
<select name="metai">
<option value="2011">2011</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
<option value="2008">2008</option>
<option value="2007">2007</option>
<option value="2006">2006</option>
</select>
<br /><br />
Ar norite gauti naujienas el.paštu:
<input type="checkbox" name="naujienos" />
<br /><br />
<input type="submit" name="submit" value=" Registruotis " />
</form>
Šiuo atveju labai svarbi pati pirmoji eilutė - formos apibrėţimas:
<form action="rezultatas.php" method="post">
Joje du reikalingi parametrai:
- “action" - nurodo, kuris PHP skriptas apdoroja formos duomenis;
- “method" - nurodo metodą, kuriuo bus perduodami formos duomenys: pagrindiniai
metodai yra du: GET ir POST. Skirtumą paaiškinsime šiek tiek vėliau.
Skirtingi formos elementai gali būti skirtingai aprašomi: daugumai iš jų skirta HTML komanda
input su parametrais.
Tekstinis laukelis:
<input type="text" />
43
Varnelė:
<input type="checkbox" />
Radio mygtukas:
<input type="radio" />
Taigi, tokiu būdu tarp komandų <form> ir </form> aprašomi visi formos laukai HTML kodu.
11.2. PHP: duomenų perdavimas į PHP skriptą - metodai GET ir POST
Kai lankytojas uţpildo formą ir paspaudţia mygtuką, tada jo duomenys nukreipiami į PHP skriptą,
kuris formoje buvo nurodytas parametru action. Panagrinėkime, kaip tas skriptas apdoroja
duomenis.
Visų pirma, iš kur PHP skripte atsiranda patys uţpildyti duomenys. Jie gali atkeliauti dviem
būdais: per jau kaţkada minėtą masyvą $_GET arba kitą masyvą $_POST. Tai priklauso nuo to,
kokį parametrą method nurodėte formos apibrėţime. Paţvelkime į abu variantus.
<form action="rezultatas.php" method="get">
Jeigu formos apibrėţime yra nurodytas metodas get, tada visi formos duomenys atkeliauja į PHP
skriptą per masyvą $_GET. O jeigu dar tiksliau, jie perduodami tiesiog per naršyklės adresą (ţr.
pavyzdį ţemiau).
Šio paveiksliuko pavyzdyje skriptui index.php perduodami du
kintamieji: $_GET['action'] ir $_GET['query'].
Tokio metodo privalumas - kiekvienas formos uţpildymas įgauna savo unikalų URL adresą, kurį
vėliau galima naudoti kitiems tikslams. Tačiau yra du gana dideli trūkumai.
1. URL adreso ilgis
Jeigu jūsų formoje yra daugiau negu keletas laukų, tada URL adresas gaunasi labai griozdiškas,
ir jį gali būti ne tik nepatogu skaityti, bet ir galite po to turėti problemų su adresų indeksavimu
Google paieškos sistemoje.
44
2. Saugumo spraga
Jeigu leisite vartotojame matyti, kokius parametrus ir kintamuosius perduodate PHP skriptui, tai
leis jiems pabandyti lengviau nulauţti skriptą, pasiunčiant netinkamus duomenis. Piktavaliai
tiesiog įrašys į naršyklės adresą kitokias kintamųjų reikšmes ir ţiūrės, kaip veiks jūsų skriptai.
Kitas variantas - perduoti duomenis per POST metodą, jis ir yra naudojamas daţniau.
Jo veikimo principas labai panašus, tik kintamieji neparodomi URL adreso eilutėje naršyklėje,
tačiau pasiekiami per masyvą $_POST.
Dar kalbant apie saugumą, POST metodas tiesiogiai neapsaugo nuo neteisingų kintamųjų
reikšmių perdavimo skriptui. Tad įsidėmėkite, kad jeigu po formos uţpildymo atliekami kokie nors
svarbūs veiksmai, tai reikia BŪTINAI tikrinti iš formos atkeliaujančius duomenis - ar jie yra būtent
tokie, kokių jums reikia.
11.3. PHP: užpildytos formos duomenų apdorojimas
Priėjome prie svarbiausios dalies. Turėdami PHP skripte duomenis iš uţpildytos formos, galime
juos apdoroti. Tai yra - išvesti juos į ekraną, patikrinti jų teisingumą ir kt.
Konkretus pavyzdys, kaip gali atrodyti viršuje pavaizduotos formos uţpildymo
skriptas rezultatas.php:
echo "Jūsų įvęstas vardas: " . $_POST['vardas'] . "<br />";
echo "Jūsų įvęstas el.pašto adresas: " . $_POST['pastas'] . "<br />";
echo "Jūsų gimimo metai: " . $_POST['metai'] . "<br />";
echo "Ar norite uţsisakyti naujienas: ";
if ($_POST['naujienos'] && $_POST['naujienos'] == 'on') {
echo 'taip';
} else {
echo 'ne';
}
45
Uţpildome formą:
Pagal viršuje esantį PHP kodą, gauname tokį rezultatą:
Taigi, tokiu būdu galite per PHP aprodoti uţpildytus formos duomenis.
Apibendrinimas
Formos yra galingas ir plačiai naudojamas internete įrankis tam, kad tinklalapių lankytojai
uţpildytų duomenis, atliktų paieškas arba registruotųsi. Šiame skyrelyje pamatėme, kaip reikia
sukurti formą ir kaip apdoroti uţpildytus duomenis.
46
12. Funkcijų rašymas
Suskaidome kodą, kad jis atrodytų prasmingesnis ir ne toks griozdiškas
Programuojant, daţnai atsiranda kodo gabalai, kuriuos reikia naudoti daugiau negu vieną kartą, o
kai kuriuos - pakankamai pastoviai. Tada prasminga tokius gabalus suskirstyti į funkcijas, kad
nereikėtų to paties kodo perrašinėti N kartų. Praktiškai, funkcija yra kodo eilučių rinkinys, turintis
pavadinimą ir galintis turėti parametrus bei grąţinti kokią nors reikšmę.
12.1. Kaip sukurti funkciją
Bendru atveju, funkcija sukuriama taip:
function SkaiciuSuma ($parametras1, $parametras2, $parametras3) {
// funkcijos atliekami veiksmai
$suma = $parametras1 + $parametras2 + $parametras3;
if ($suma > 10) { echo $suma; }
return $suma; // "return" - funkcijos grąţinama reikšmė
}
Iš šio pavyzdţio svarbiausi momentai:
- Funkcija turi turėti pavadinimą. Jis gali būti jūsų sugalvotas, svarbiausia, kad jis
nesutaptų su jau rezervuotais PHP funkcijų pavadinimais ir su jūsų pačių sukurtų kitų
funkcijų pavadinimais.
- Funkcija gali (bet neprivalo) turėti parametrus, jie rašomi skliausteliuose po pavadinimo,
per kablelį. Jeigu parametrų nėra paduodama, rašomi tiesiog tušti skliausteliai ( ).
- Funkcijos kodas rašomas tarp lauţtinių skliaustų { ir }.
47
- Funkcija gali (bet neprivalo) grąţinti rezultatą-kintamąjį, kuris turi būti nurodytas po
kodinio ţodelio return.
Parodysime konkrečios ir prasmingos funkcijos pavyzdį. Sakykime, kad mums reikia funkcijos,
kuri suskaičiuotų mokinio paţymių aritmetinį vidurkį ir išvestų tik tuos paţymius, kurie aukštesni
uţ 8.
function Pirmunai($pazymiu_masyvas) {
$suma = 0;
for ($i=0; $i < count($pazymiu_masyvas); $i++) {
if ($pazymiu_masyvas[$i] > 8) {
echo $pazymiu_masyvas[$i] . " ";
}
$suma = $suma + $pazymiu_masyvas[$i];
}
// tikriname, ar masyvas ne tuščias, nes iš 0 dalinti negalima
if (count($pazymiu_masyvas) > 0) {
$vidurkis = $suma / count($pazymiu_masyvas);
} else {
$vidurkis = 0;
}
return $vidurkis;
}
12.2. Kaip iškviesti funkciją ir ją panaudoti
Na gerai, sukūrėme mes kelias funkcijas, dabar metas jomis pasinaudoti. Tai vadinama
funkcijos iškvietimu, tam reikia parašyti funkcijos pavadinimą ir skliausteliuose nurodyti
parametrus. Lygiai taip pat, kaip kviečiamos įprastinės PHP funkcijos, tokios
kaip strlen() ar count().
Pavyzdys 1:
$suma = SkaiciuSuma(5, 8, 7);
// iškviečiame funkciją ir paduodame jai tris parametrus-skaičius.
48
Pavyzdys 2:
$pazymiai = array(8,9,10,2,5,1,8,9,10,10,10,10);
$vidurkis = Pirmunai($pazymiai);
if ($vidurkis > 8.5) {
echo "Mokinys yra pirmūnas";
} else {
echo "Mokinys nėra pirmūnas";
}
Įdomus klausimas - kas atsitinka, jeigu parametrai yra aprašyti pačioje funkcijoje, bet
nepaduodami per iškvietimą. Tada, be abejo, ekrane pasirodys klaida ir PHP skriptas nebus
toliau vykdomas.
Tačiau yra būdas to išvengti - kiekvienam parametrui priskirti reikšmę pagal nutylėjimą.
Funkcijos apibrėţime galite prie kiekvieno parametro nurodyti reikšmę, kuri bus priskirta
automatiškai, jeigu per iškvietima tas parametras nebus perduotas.
Pavyzdys:
function SkaiciausKvadratas ($skaicius = 2) {
return $skaicius * $skaicius;
}
$kvadratas = SkaiciausKvadratas(5); // funkcija grąţina 25
$kvadratas = SkaiciausKvadratas();
// funkcija grąţina 4, nes skaičiuoja kvadratą iš 2
Apibendrinimas
Taigi, kaip matome, galime naudoti ne tik PHP kalbos funkcijas, bet ir rašyti savąsias. Tokiu būdu
suskirstysime programinį kodą efektyviau. Šiame skyrelyje pamatėme, kaip reikia sukurti funkciją
ir kaip ją iškviesti bei panaudoti kitoje skripto vietoje.
49
13. Vartotojų sesijos
Prisijungimų ir registracijos sistema, kad galėtumėte autorizuoti vartotojus
Rimtesni tinklalapiai turi turėti savo autorizacijos mechanizmą. Kad lankytojai galėtų registruotis,
prisijungti ir gauti tam tikras paslaugas ar funkcijas, kurios neprieinamos neregistruotiems
vartotojams. Kaip tai daroma PHP kalboje - aptarsime šiame skyrelyje.
Iš esmės, yra du būdai, kaip saugoti vartotojų prisijungimo sesijas: tai yra sausainiukai
(cookies) bei paprastos PHP sesijos. Kadangi labiau paplitęs antrasis būdas, būtent apie jį ir
papasakosime.
13.1. Sesijos sukūrimas ir panaudojimas
Visas darbas su vartotojų sesijomis susideda iš keturių etapų:
- Sesijos sukūrimas;
- Sesijos kintamųjų uţpildymas;
- Sesijos kintamųjų panaudojimas;
- Sesijos uţbaigimas.
Kad panaudotumėte su sesijomis susijusias galimybes, pačioje skripto pradţioje turite pradėti
sesiją:
session_start();
Viskas, tiesiog paprasta funkcija be parametrų. Svarbu ją iškviesti anksčiau, negu yra į ekraną
išvedamas bet koks tekstas, kitaip PHP išmes klaidą ir neleis tęsti skripto vykdymo. Ideliausiame
variante, kaip sakiau, ši funkcija kviečiama pačioje skripto pradţioje.
Taigi, sesija iškviesta, ir galima ją naudoti. Kiekvienai vartotojo sesijai serveryje yra sukuriamas
kintamųjų masyvas, kuris saugomas tik tos sesijos gyvavimo metu. Dėl to, lankytojui pereinant
50
nuo puslapio prie puslapio, galima atsekti, kas tai per vartotojas, kokios jo teisės, kokius
puslapius jis jau aplankęs ir t.t.
Visa tai atliekama, įrašant duomenis į specialų sesijos masyvą $_SESSION. Tiesiog masyvo
elementams priskiriame reikšmes.
$_SESSION['vartotojo_role'] = "1";
// paţymi, kad vartotojo rolė yra pirma (pvz, administratorius)
$_SESSION['puslapiai']++;
// paţymi, kad lankytojas aplankė dar vieną puslapį (+1)
Masyvas $_SESSION su išsaugotomis reikšmėmis yra prieinamas visiems PHP skriptams, kol
tas vartotojas neatsijungia nuo sistemos ir neuţbaigia savo sesijos.
O kai vartotojas atsijungia nuo sistemos, reikia jo sesiją būtinai panaikinti. Kitaip gali kilti
problemų: prie to paties kompiuterio atsisėdęs kitas ţmogus prieis prie to vartotojo sesijos be
slaptaţodţio.
Panaikinimas atliekamas su funkcija session_destroy() be parametrų:
session_destroy();
13.2. Sesijos panaudojimo pavyzdys - autorizacijos mechanizmas
Paţiūrėkime į konkretų pavyzdį. Sakykime, jūs turite savo nedidelę turinio valdymo sistemą, ir
jums reikia padaryti, kad prie jos galėtų prisijungti tik administratorius su tam tikru vartotoju ir
slaptaţodţiu. Prisijungimo forma gali atrodyti maţdaug taip:
Iš šios prisijungimo formos į PHP skriptą perduodami trys formos parametrai-
kintamieji: login, password ir submit. O formos kintamųjų perdavimo metodas yra POST.
Tada sutrumpintas PHP skripto tekstas gali atrodyti taip:
session_start();
$error = ""; // klaidos tekstas - bendru atveju šis kintamasis tuščias
if ($_POST['submit'] == "Prisijungti") {
51
// jeigu paspaustas mygtukas "Prisijungti"
if ($_POST['login'] == "admin" && $_POST['password'] == "admin123") {
$_SESSION['username'] = "admin";
} else {
$error = "Neteisingi prisijungimo duomenys";
}
}
if ($_SESSION['username'] == "admin") {
echo "Sveiki, jums prieinamos administratoriaus funkcijos...";
// parodomas administratoriaus meniu
} else {
echo "<form> ... </form>"; // uţkraunama visa prisijungimo forma
if ($error != "") { echo $error; }
}
Iš karto galiu pakomentuoti, kad šis pavyzdys yra labai supaprastintas, reali vartotojų sesijų
sistema turi būti sudėtingesnė, nes reikia atsiţvelgti į daug niuansų. Pvz, nepatartina slaptaţodţių
saugoti atvirai PHP skriptuose, nes juos gali pamatyti bet kas, turintis priėjimą prie web-serverio.
Bendru atveju, vartotojų duomenys turi būti saugomi duomenų bazėje, o slaptaţodis uţkoduodas
tam skirta funkcija, viena iš tokių - MD5.
Apibendrinimas
Šiame skyrelyje pamatėme, kaip reikia dirbti su vartotojų sesijomis: kaip sukurti sesiją, kaip
panaudoti jos duomenis, bei kaip panaikinti sesiją po vartotojo atsijungimo nuo sistemos.
52
14. Data ir laikas
PHP turi galybę funkcijų darbui su datomis ir laiku
Vienas iš daţnai paitaikančių poreikių tinklalapiuose yra darbas su data ir laiku. Ar tai yra
straipsnio parašymo datos išvedimas, ar vakar dienos duomenų parodymas, ar visas kalendorius
- visa tai susiję su tomis pačiomis PHP funkcijomis, kurių datoms formatuoti, apdoroti ir
atvaizduoti yra pakankamai nemaţai.
14.1. Funkcija time()
Ši funkcija neturi parametrų ir grąţina tiesiog dabartinį laiką pagal serverio nustatymus. Svarbu
ţinoti, kad tas laikas grąţinamas ne su pilna data ir valandomis/minutėmis, o tiesiog kaip vienas
ilgas skaičius, kuris reiškia laiko momentą pagal UNIX sistemą, tas skaičius dar vadinamas UNIX
timestamp. Faktiškai, jis reiškia sekundţių skaičių, praėjusių nuo 1970 m. sausio 1 d.
Kam to reikia? Ogi tam, kad kai gaunate sekundţių skaičių kaip sveikąją reikšmę, galima su ja
atlikti įvairias matematines gudrybes - formatuoti, kopijuoti ir t.t. Be to, reikia prisiminti, kad daug
PHP funkcijų kaip parametrą priima būtent Timestamp formato laiką.
14.2. Funkcija date()
O dabar priėjome prie klausimo, kaipgi galima formatuoti datą ir laiką, prieš išvedant į ekraną.
Kaip iš to jau minėto UNIX laiko padaryti normalias valandas, minutes, sekundes ir kt. Būtent tam
yra skirta funkcija date(), kuri turi du parametrus. Pirma, jai paduodamas formatas, kuriuo reikia
suformatuoti laiką, o kitas parametras - pats laikas UNIX formatu. Antras parametras nebūtinas,
jei jis nepaduodamas - imamas dabartinis serverio laikas.
Konkretūs funkcijos panaudojimo pavyzdţiai:
53
echo date("Y-m-d"); // dabartinė data formatu METAI-MĖNUO-DIENA
echo date("Y-m-d H:i:s"); // išvedama dabartinė data ir laikas
echo date("H:i:s", time()-60); // laikas prieš minutę (60 sekundţių)
Kaip matote, pavyzdţiuose kiekvienas formato simbolis turi kaţkokią reikšmę.
Pagrindinius simbolius galite pamatyti ţemiau lentelėje:
Y metai
m Mėnuo
d Diena
H Valanda
i Minutė
s Sekundė
w savaitės diena (skaičius nuo 0 iki 6, 0 reiškia sekmadienį)
Ir taip toliau, formatavimo ţenklų dar yra labai daug. Iš šitų specialių simbolių ir jums reikalingų
skyrybos ţenklų galite sudarinėti datos ir laiko formatą išvedimui į ekraną.
14.3. Funkcija strtotime()
Kartais prireikia ir atvirkštinio veiksmo. Sakykime, puslapio lankytojas įvedė į formos lauką datą
formatu YY-MM-DD, o jums reikia ją aprodoti kaip UNIX laiką, kad galėtumėte paduoti kaip
parametrą kitoms PHP funkcijoms. Tam skirta funkcijastrtotime(), kuri praktiškai paima tekstinę
eilutę ir bando joje atrasti vieną iš datos bei laiko formatų, jei atranda - tada grąţina UNIX formato
laiką sekundėmis.
Pavyzdys:
$data = "2011-03-05 18:20:00"; // nustatome laika prieš 20 minučių
$laikas = strtotime($data) - 20*60;
echo date("Y-m-d H:i:s", $laikas);
Apibendrinimas
Susipaţinome su pagrindinėmis datos ir laiko funkcijomis, kurias siūlo PHP kalba.
54
15. MySQL duomenų bazės sistema
Apie tai, kur saugomi visi tinklalapio duomenys
Kaip turbūt galima numanyti, ne viskas yra saugoma PHP skriptuose ir kintamuosiuose. Antraip
kiltų klausimas - o kur saugomi vartotojų duomenys, kai jie atsijungia nuo interneto? Būtent tam
yra skirtos duomenų bazės arba, kalbant moksliškiau, duomenų bazių valdymo sistemos.
Viena iš populiariausių tokių sistemų yra MySQL, su kuria daţniausiai ir siejamas programavimas
PHP kalba. Būtent šią sistemą nagrinėsime šiame skyriuje.
15.1. Kas yra duomenų bazė?
Šis terminas yra vartojamas daţnai kaip programuotojų, taip ir ţmonių, nesusijusių su IT. Ir visgi:
kas tai yra?
Duomenų bazes galima palyginti su visiems paţįstamomis Excel lentelėmis, kuriose saugomi
duomenys pagal tam tikrus stulpelius ar laukus.
Duomenų bazė skirtą duomenų saugojimui, apdorojimui ir tvarkymui. Kitais ţodţiais, duomenų
bazėje yra saugomi jūsų tinklalapio duomenys.
Tam skirtos specialios struktūros - lentelės, kurios savo ruoţtu susideda iš lentelės laukų.
Konkretus pavyzdys - viršuje esančio Excel failas pavertimas į tinklalapio vartotojų duomenų
bazės lentelę:
55
Vartotojai
ID
Vardas
Slaptaţodis
El.paštas
Prisijungimo laikas
Viršutinėje dalyje yra lentelės pavadinimas, o po juo išvardinti visi tos lentelės laukai: vartotojo ID
numeris, vardas, slaptaţodis, elektroninio pašto adresas ir paskutinio prisijungimo laikas.
Kitas pavyzdys - sakykime, jūsų tinklalapyje yra saugomas produktų katalogas. Tai tokia
duomenų bazės lentelė galėtų atrodyti taip:
Produktai
ID
Pavadinimas
Kategorija
Aprašymas
Kaina
Ir taip lentelė po lentelės gaunama visa duomenų bazė, kurioje saugoma informacija apie jūsų
projekto vartotojus, straipsnius, katalogus, naujienas ir viską, su kuo susijęs jūsų konkretus
tinklalapis.
Bet, be abejo, lentelėmis viskas nesibaigia.
Turbūt pastebėjote, kad abiejose viršuje esančiose lentelėse yra laukas ID. Kam jis reikalingas?
Vienas iš pritaikymų - kad tą būtent įrašo unikalų ID galima būtų naudoti kitose duomenų bazės
lentelėse.
Sakykime, jums reikia ne tik vartotojų lentelės, bet ir atskiros lentelės, saugančios kiekvieną
vartotojo prisijungimą. Kaip toje lentelėje identifikuoti vartotoją? Teisingai, pagal vartotojo ID.
Pavyzdys:
Prisijungimai
Vartotojo ID
Prisijungimo laikas
56
Atsijungimo laikas
IP Adresas
Lentelėje Prisijungimai laukas Vartotojo ID sutaps su lentelės Vartotojai lauku ID, ir tada mes
galėsime atsekti kiekvieno vartotojo prisijungimus pagal jo ID.
15.2. SQL kalba
Praktiškai visas darbas su duomenų baze vyksta su SQL kalbos uţklausų pagalba. Šios kalbos
detalus nagrinėjimas neįeina į šios knygos temas, tad tuo reikėtų jums pasidomėti atskirai, bet
paprasčiausias ir daţniausiai naudojamas uţklausas, be abejo, panaudosime ir mūsų
pavyzdţiuose.
Su SQL kalba galima, pavyzdţiui:
- Sukurti lentelę;
- Pridėti naują lauką prie lentelės;
- Įrašyti duomenis į lentelę arba juos pakoreguoti/pašalinti;
- Ištraukti iš lentelės reikalingus duomenis;
- Ištraukti iš lentelės reikalingus duomenis pagal tam tikrą paieškos filtrą;
- Ištraukti agreguotus duomenis iš kelių lentelių pagal lentelių sąryšius.
Ir taip toliau...
Keletas konkrečių uţklausų pavyzdţių:
$query = "select * from vartotojai where id = 123";
// grąţina vartotojo duomenis su ID 123
$query = "insert into vartotojai
(vardas, slaptazodis, el_pastas, prisijungimo_laikas)
values
('Petriukas', 'Petr123', '[email protected]', '2011-03-07')";
// įterpia eilutę į vartotojų lentelę
$query = "delete from vartotojai where id < 100";
// ištrina visus vartotojų įrašus su ID iki 100
57
15.3. Darbas su duomenų MySQL baze: įrankis PhpMyAdmin
Nesibaiminkite - kuriant duomenų bazę, jums nereikės rašyti SQL kalbos uţklausų. Yra sukurti
įrankiai, padedantys automatizuoti veiksmus ir juos atlikti paprasčiau. Labiausiai paplitusi sistema
darbui su MySQL yra PhpMyAdmin, kai uţsakote vietą serveryje - teiraukitės, ar yra priėjimas
prie PhpMyAdmin, ir kaip būtent prie tos sistemos prieiti.
Jei gausite prieigą, galėsite patogiai kurti duomenų bazes ir jas redaguoti.
Kaip kurti duomenų bazę su phpMyAdmin - čia irgi ne šios knygos tema, pasiskaitykite apie tai
internete. Toliau darysime prielaidą, kad jūs jau turite duomenų bazę, ir jums reikia su ja dirbti iš
PHP kalbos skriptų. Paaiškinsime, kaip iš PHP prisijungti ir valdyti savo duomenis.
15.4. PHP ir MySQL: prisijungimas ir užklausų vykdymas
Pirmas dalykas, kurį mes turime padaryti iš PHP pusės yra prisijungti prie duomenų bazės
serverio.
Tam yra skirta funkcija mysql_connect().
$connect = mysql_connect('localhost', 'vartotojas', 'slaptazodis');
Funkcija turi tris parametrus: duomenų bazės serverio adresą, vartotoją ir slaptaţodį.
Daţniausiai duomenų bazė yra tame pačiame serveryje, dėl to rašoma "localhost".
Vartotojas ir slaptaţodis nustatomi iš serverio pusės, prie serverio administravimo įrankių turi būti
galimybę sukurti DB vartotoją.
Funkcija grąţina prisijungimo identifikatorių, kurį vėliau galima naudoti kitose DB funkcijose.
Sekantis dalykas, kurį reikia padaryti - pasirinkti konkrečią duomenų bazę, su kuria norime dirbti,
nes viename serveryje gali būti keletas duomenų bazių.
mysql_select_db("projektas");
// ši funkcija parenka duomenų bazę pagal jos pavadinimą
58
Ir viskas, dabar jau galima rašyti ir vykdyti konkrečias SQL uţklausas, susijusias su pasirinkta
duomenų baze. Tam yra skirta funkcija mysql_query(), kurios rezultatas - SQL uţklausos
įvykdymas.
Pavyzdys 1. Lentelės uţpildymas duomenimis:
$query = "insert into vartotojai
(vardas, slaptazodis, el_pastas, prisijungimo_laikas) values
('Petriukas', 'Petr123', '[email protected]', '2011-03-07')";
$result = mysql_query($query);
echo "Į lentelę įrašyta: " . mysql_affected_rows() . " naujų eilučių";
Funkcijai mysql_query() paduodamas eilutės kintamasis, kuriame aprašyta SQL uţklausa. O
grąţina ši funkcija užklausos įvykdymo identifikatorių, kuris vėliau yra daţnai reikalingas
kitose funkcijose, tai bus parodyta pavyzdţiuose ţemiau.
Kiek ţemiau esanti funkcija mysql_affected_rows() neturi parametrų ir grąţina skaičių - kiek
lentelės eilučių buvo įterpta ar pakoreguota po paskutinės uţklausos vykdymo.
Pavyzdys 2. Lentelės duomenų atnaujinimas:
$query = "update vartotojai
set prisijungimo_laikas = '2011-03-10' where ID = 123";
$result = mysql_query($query);
echo "Lentelėje atnaujinta: " . mysql_affected_rows() . " eilučių";
Pavyzdys beveik analogiškas, tik vietoje SQL komandos INSERT naudojama komanda
UPDATE.
Pavyzdys 3. Duomenų ištraukimas iš lentelės:
$query = "select * from vartotojai order by id";
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);
for ($i=0; $i < $num_rows; $i++) {
$row = mysql_fetch_array($result);
echo "<strong>ID:</strong>" . $row['ID'] . ";
<strong>Vardas: </strong> ".$row['vardas']."<br />";
}
59
Čia jau viskas sudėtingiau, reikia paaiškinimų. Duomenų ištraukimui ir panaudojimui reikalingos
dar kelios PHP funkcijos.
Funkcija mysql_num_rows() grąţina iš duomenų bazės ištrauktų eilučių skaičių pagal uţklausą.
Tos funkcijos parametras yra jau minėtas uţklausos įvykdymo identifikatorius, kuris gaunamas po
funkcijos mysql_query() iškvietimo.
Taigi, su funkcijos mysql_num_rows() pagalba gauname eilučių skaičių. Ir tada galime parašyti
ciklą, kuriame bus traukiama po vieną rezultatų eilutę ir atskirais laukais išvedama į ekraną.
Tada tampa svarbi funkcija mysql_fetch_array(), kurios rezultatas - grąţinama viena EINAMOJI
eilutė iš viso eilučių sąrašo, vėlgi pagal tą patį uţklausos identifikatorių. Ţodis "einamoji" reiškia
tai, kad jeigu pirmą kartą iškviečiame mysql_fetch_array(), grąţinama pirma eilutė, antrą kartą -
antra eilutė, ir taip toliau iki tol, kol eilučių nebebus, ir tada ta funkcija grąţins klaidą.
Taigi, mūsų atveju yra uţsukamas ciklas, ir kiekvienu jo vykdymo metu ištraukiame po vieną
duomenų bazės rezultato eilutę. Ta eilutė yra įrašoma kaip masyvas su tekstinio formato
elementais, ir vėliau mes to masyvo elementus galime panaudoti, pvz. išvesti į ekraną, kaip
parodyta aukščiau.
15.5. Darbo su duomenų baze užbaigimas
Korektiškai dirbant su duomenų baze, reikia uţdaryti kiekvieną prisijungimą prie jos. Kitaip tariant,
išvalyti šiukšles.
Tam yra naudojama funkcija mysql_close(). Jai kaip parametras paduodamas prisijungimo
identifikatorius.
mysql_close($connect);
Apibendrinimas
Šiame skyriuje aptarėme, kas yra duomenų bazė bei kaip dirbti su MySQL duomenų bazių
sistema iš PHP skriptų pusės. Suţinojome, kaip įterpti duomenis į duomenų bazę, kaip juos
ištraukti bei kaip išvesti į ekraną.
Čia apţvelgėme tik minimalų funkcionalumą, apie SQL kalbą ir duomenų bazes plačiau reikėtų
pasiskaityti tam skirtoje specialioje literatūroje.
60
16. Objektinis programavimas
Kai visos funkcijos yra suskirstomos į klases
Jeigu dirbate prie didelio projekto, kuriame yra daug funkcijų, atsiranda poreikis tas funkcijas
kaţkaip grupuoti pagal jų panaudojimą arba pagal temą. Vėliau atrandate, kad kai kurios
funkcijos yra panašios, tarsi būtų paveldėtos viena iš kitos, tik su neţymiais pakeitimais. Visam
tam dideliam katilui tvarkyti galima pasitelkti objektinį programavimą.
Objektinis programavimas yra būdingas daugeliui programavimo kalbų. Iš esmės, tai yra
programavimo "filosofija", siekiant tvarkingesnio, suprantamesnio ir korektiškesnio programinio
kodo.
Programavimo pasaulyje vyrauja dvi didelės programavimo "filosofijos" - tai yra funkcinis
programavimas (kai visi veiksmai yra suskirstyti į funkcijas) bei objektinis programavimas (kai
tos funkcijos yra sugrupuotos į klases, taip pat klasės turi savo atributus ir kt). Visas PHP kodas,
iki šiol jūsų matytas šios knygos rėmuose, buvo parašytas būtent funkcinio programavimo
pagrindu, o dabar metas supaţindinti jus su kiek kitokiu pasauliu.
16.1. Kas yra OOP ir kam jo reikia
Objektinis programavimas (angl. Object-Oriented Programmint) arba OOP reikalingas tada, kai
norite tvarkos savo kode. Kai norite aiškiau suprasti, bei kad kiti suprastų projekto struktūrą.
Sakykime, kad jūs kuriate tinklalapį su nuorodomis į įdomius puslapius. Ten norite suskirstyti savo
funkcijas į grupes pagal jų paskirtį. Vienos funkcijos yra susijusios su vartotojais, kitos - su
nuorodų klasifikavimu, dar dalis funkcijų - su komentarais ir atsiliepimais.
61
Suskirstykime tas funkcijas į tris atskiras klases. PHP kalboje tai atrodytų maţdaug taip:
// pirmiausia - klasė darbui su vartotojų duomenimis,
// kurie saugomi duomenų bazėje
class Vartotojai {
function SukurtiVartotoja($vardas, $slaptazodis, $el_pastas) {
$query = "insert into vartotojai ...";
// ... funkcija vartotojo sukūrimui
}
function VartotojoDuomenys($id) {
$query = "select * from vartotojai where id = $id";
// ... iš duomenų bazės paimami vartotojo duomenys
}
function PrisijungimoDuomenys($vardas, $slaptazodis) {
$query = "select id from vartotojai
where vardas = '".$vardas."'
and slaptazodis = '".$slaptazodis."'";
// ... patikriname, ar vartotojas įvedė
// teisingus prisijungimo duomenis
}
}
/* --------------------------------------- */
// antra klasė - naudingų nuorodų talpinimas ir grupavimas
class Nuorodos {
function IterptiNuoroda($pavadinimas, $kategorija,
$adresas, $aprasymas) {
$query = "insert into nuorodos ...";
// ... įterpia nuorodos įrašą į duomenų bazę
}
function NuoroduKategorijos() {
$query = "select * from nuorodu_kategorijos order by pavadinimas";
// ... ištraukia iš duomenų bazes nuorodų kategorijas pagal abėcėlę
}
62
function IdomiausiosNuorodos() {
$query = "select nuorodos.pavadinimas, count(*) as ivertinimai
from nuorodu_ivertinimai
join nuorodos on nuorodu_ivertinimai.nuorodos_id = nuorodos.id
group by nuorodos.pavadinimas order by ivertinimai
limit 0,10";
// ... sudėtingesnė uţklausa į duomenų bazę –
// TOP 10 nuorodų pagal lankytojų įvertinimus
}
}
/* --------------------------------------- */
// ir galiausiai - klasė, susijusi su komentarais
class Komentarai {
function IterptiKomentara($nuoroda_id, $vartotojas_id, $komentaras) {
$query = "insert into nuorodu_komentarai ...";
// ... įterpia vartotojo komentarą prie nuorodos
}
function NaujausiKomentarai() {
$query = "select * from nuorodu_komentarai
order by id desc limit 0,10";
// ... ištraukia iš duomenų bazės 10 naujausių komentarų
}
function NuorodosKomentarai($nuoroda_id) {
$query = "select * from nuorodu_komentarai
where nuoroda_id = $nuoroda_id
order by id desc limit 0,10";
// ... ištraukia iš duomenų bazės komentarus
// prie konkrečios nuorodos
}
}
Štai toks gana ilgas pavyzdys. Tikiuosi, iš jo pakankamai suprantama klasių struktūra. Kiekviena
klasė turi apibrėţiama ţodţiuclass, tada nurodomas klasės pavadinimas ir vėliau tarp lauţtinių
skliaustų { } rašomas visas klasės tekstas.
63
Be funkcijų (arba, taip vadinamų, klasės metodų) klasė gali dar turėti ir savo vidinius
kintamuosius arba klasės atributus. Jie aprašomi su specialiu ţodeliu var:
// pavyzdys - klasė, skirta darbui su duomenų baze
class DuomenuBaze {
var $serveris = "localhost";
var $vartotojas = "admin";
var $slaptazodis = "admin12345";
var $duomenu_baze = "projektas";
var $prisijungimas;
function Prisijungimas() {
$this->prisijungimas = mysql_connect($this->serveris,
$this->vartotojas, $this->slaptazodis);
mysql_select_db($this->$duomenu_baze);
// ... funkcija prisijungimui prie duomenų bazės serverio
}
}
Kaip matote, yra aprašyti penki klasės atributai, ir pirmiems keturiems iš jų yra priskirtos
pirminės reikšmės (jos vėliau gali būti keičiamos).
Taip pat svarbu, kaip reikia kreiptis į tuos kintamuosius. Tam naudojamas ţodelis this bei
simbolių junginys ->.
Lygiai taip pat reikia kreiptis ir prie klasės metodo, jeigu reikia jį iškviesti iš kito metodo:
// pavyzdys - klasė, skirta darbui su duomenų baze
class DuomenuBaze {
var $serveris = "localhost";
var $vartotojas = "admin";
var $slaptazodis = "admin12345";
var $duomenu_baze = "projektas";
var $id;
var $rezultatas;
64
function Prisijungimas() {
$this->id = mysql_connect($this->serveris,
$this->vartotojas, $this->slaptazodis);
mysql_select_db($this->$duomenu_baze);
// ... funkcija prisijungimui prie duomenų bazės serverio
}
function Uzklausa($query) {
$this->Prisijungimas();
$this->rezultatas = mysql_query($query);
// ... tolimesnis uţklausos rezultatų apdorojimas
}
}
16.2. Objektai ir klasių panaudojimas
Dabar apie tai, kaip sukurtas klases ir jų metodus panaudoti išorėje. Bendru atveju, jeigu mums
reikia panaudoti kokią funkciją, mes tiesiog ją iškviečiame - parašome jos pavadinimą ir
parametrus. Su klasėmis yra kiek kitaip: prieš tai reikia sukurti tos klasės objektą, o tada jau
galima bus atlikti veiksmus su tuo objektu.
$db = new DuomenuBaze();
Išverčiant į ţmogišką kalbą, mes kaţkokiam kintamajam priskiriame norimos klasės apibrėţimą.
Programavime tas kintamasis vadinamas klasės objektu. Vėliau būtent su tuo objektu mes
atlikinėsime veiksmus. Įdomiausia tai, kad galima sukurti kelis tos pačios klasės objektus, ir su
jais dirbti atskirai. Pavyzdys:
$db1 = new DuomenuBaze();
$db1->duomenu_baze = "pirmas_projektas";
$db1->Prisijungimas();
// kitas tos pačios klasės objektas
$db2 = new DuomenuBaze();
$db2->duomenu_baze = "antras_projektas";
$db2->Prisijungimas();
Kaip matote, sukūrę objektą, mes galime ne tik iškviesti jo metodus, bet ir priskirti reikšmę jo
atributams-kintamiesiems, kurie vėliau įtakoja metodų iškvietimo parametrus.
65
16.3. Paveldėjimas
Dar viena svarbi objektinio programavimo galimybė ir galimybė kurti klases, kurios paveldimos
viena nuo kitos.
Sakykime, jūs turite klasę Transportas, kurios pagalba dirbate su duomenimis apie transporto
priemones. Tačiau vėliau matote, kad projektas išsipletė, ir jums reikia atskiro
funkcionalumo krovininiams automobiliams, ir atskirų funkcijųmotociklams. Bet dalis iš tų
funkcijų vis tiek turi būti bendros.
Sprendimas atrodo taip:
// bendra klasė, skirta duomenims apie transportą
class Transportas {
function RegistruotiTransporta() {
// ... funkcija transporto priemones registravimui
}
// ... dar keletas funkcijų, skirtų bendrai transporto priemonėms
}
// klasė krovininiams automobiliams
class Krovininiai EXTENDS Transportas {
var $krovinio_mase;
function KrovinioMase() {
// ... funkcija, skirta tik krovininiam transportui
}
}
// klasė motociklams
class Motociklai EXTENDS Transportas {
var $motociklu_klase;
function MotocikloKlase() {
// ... funkcija, skirta tik motociklams
}
}
66
// klasių objektų sukūrimas
function $krovininis = new Krovininiai();
$krovininis->KrovinioMase();
$krovininis->RegistruotiTransporta();
function $motociklas = new Motociklai();
$motociklas->MotocikloKlase();
$motociklas->RegistruotiTransporta();
Specialiu ţodeliu extends mes uţrašome, kad kuriama klasė paveldima nuo kitos klasės ir tuo
pačiu paveldi visas jos savybes bei objektus. Kaip matome ţemiau, dviejų sukurtų paveldėtų
klasių objektai prieina kaip prie savo individualių funkcijų, taip ir prie bendrų "tėvo" klasės funkcijų.
Apibendrinimas
Šiame skyrelyje suţinojome, kad yra būdas efektyviau suskirstyti programinį kodą, sudėliojant jį
klasėmis ir vėliau dirbant su tų klasių objektais. Suţinojome, kas yra klasių metodai ir atributai,
kaip sukurti klasių metodus bei kas yra klasių paveldėjimas.
67
Knygos apibendrinimas
Štai ir viskas, ką sugebėjome papasakoti jums šios nedidelės knygos rėmuose. Čia buvo
paliestos temos, kurių uţtenka, norintiems pradėti programuoti PHP kalba. Toliau galima gilintis į
kiekvieną temą atskirai, tačiau tai jau bus kitų knygų skyreliai. Tikimės, kad ši mini-knyga jums
patiko ir buvo naudinga. Jei turite pastabų ar tiesiog norite pareikšti savo nuomonę, galite drąsiai
rašyti el.paštu [email protected].
Sėkmės PHP programavimo kelyje!