PHP Pamokos Pradedantiesiems ..... Apie PHP Kam skirta Å¡i kalba ir kodÄl ji tokia populiari Taigi. visos jos paraÅ¡yto...
PHP Pamokos Pradedantiesiems Knyga tiems, kurie nori drąsiai žengti pirmuosius žingsnius
Povilas Širvinskas http://www.skaitykIT.lt
© 2011
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
2
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
3
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;
4
-
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.
5
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.
6
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.
7
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.
8
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
9
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
10
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.
11
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: Š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ą:
12
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: Antroji programa
Š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.
13
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; echo “Labas rytas”;
// skaičiuojame sumą
# 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.
14
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.
15
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.
16
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ą.
17
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";
18
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"
19
$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.
20
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.")"; }
21
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) if ($taskai == 1)
// ar kintamasis $ilgis didesnis uţ 20 // 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ų.
22
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:
23
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.
24
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 }
25
Paprastas pavyzdys: $valanda = 0; while ($valanda "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
31
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 . ""; } 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.
32
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.
33
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'] . ""; echo "Straipsnio ID: " . $_GET['id'] . ""; echo "Straipsnio metai: " . $_GET['metai'] . "";
34
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 ""; echo ""; for ($m = 1900; $m 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.
48
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
49
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") {
50
// 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 " ... "; // 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.
51
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:
52
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.
53
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ę:
54
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
55
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
56
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ą
57
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 "ID:" . $row['ID'] . "; Vardas: ".$row['vardas'].""; }
58
Č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.
59
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.
60
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ę }
61
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.
62
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;
63
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.
64
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 } }
65
// 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.
66
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!
67