Php Knyga (PDF)

67
PHP Pamokos Pradedantiesiems Knyga tiems, kurie nori drąsiai žengti pirmuosius žingsnius Povilas Širvinskas http://www.skaitykIT.lt © 2011

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!