You are on page 1of 260
SAMS Ha tényleg csak a valaszokra kivanesi 24 egyszerti, egyords lecke & 3% o 4 > ; D ef P | hasznalatat A forditas a kovetkez6 angol eredeti alapjin készilt: Matt Zandstra: SAMS Teach Yourself PHP in 24 Hours, Third Edition Copyright © 2004 by Sams Publishing. ‘Authorized translation from the English language edition, entitled SAMS Teach Yourself PHP in 24 Hours, 3st Edition, ISBN 0672326191, by Zandstra, Matt, published by Pearson Education, Inc, publishing as Que/Sams. Copyright © 2004 by Sams Publishing Translation and Hungarian edition © 2005 Kiskapu Kft, All rights reserved! ‘All rights reserved. No part of this book, including interior desing, cover design, and icons, r reproduced or transmitted in any form, by any means ¢electronic, photocopying, recordin, otherwise) without the prior written permission of the publishes, Trademarked names appear throughout this book. Rather than list the names and entities that own the trademarks or insert a trademark symbol with each mention of the trademarked name, the publisher states that itis using the names for editorial purposes only and to the benefit of the trademark owner, with no intention of infringing upon that trademark. Forditis é magyar viltozat © 2005 Kiskapu Kit. Minden jog fenntartval A konyy egyetlen része sem sokszorosithat6 semmilyen médszerrel a Kiad6 eldzetes irisos enge délye nélkil. Ez a korlitozis kiterjed a bels6 tervezésre, a boritéra & ikonokra is. A kanyvben bejegyzet védjegyek és mirkanevek is felbukkanhatnak. Ahelyett, hogy zt minden egyes helyen kaon jeleznénk, a Kiad6 ezennel kijelenti, hogy a miben eléfordulé valamennyi védett never ¢s jelzést szerkesztési célokra, johiszemien, a név tulajdonosinak érdekeit szem cl6e tartva hasenalia és nem dll szdindékdban az azokkal kapcsolatos jogokat megszegni, vagy kétségbe vonni A szera6k és a kiad6 a lehet legnagyobb korlltekintéssel jr el © kiadviny elkészi a szer26, sem a kiadé nem villal semminemd feleldsséget vagy garancidt a konyy tart teljességével kapcsolatban. Sem a szer2, sem a kiadd nem vonhaté fekelSsségre barmilyen balesct vagy kiresemény miatt, mely kéizvetve vagy kizvetlendl kapesolatba hozhat6 e kiadvannyal Lektor: Rézmiives Lasxi6 Forditiis: Dr. O16 Istudin, Téth Ldszld, Rézmiives Laszlé Miiszaki szerkesztds Csutak Hofjimann Levente Trdelés: Kis Péter Borité: Bogndr Tamas Felelés kiad6 a Kiskapu Kit, (gyvezet6 igazgat6ja °© 2005 Kiskapu Kit. 1081 Budapest, Népszinhéz u. 31.1.7 Telefon: (436-1) 477-0443 Fax: (+36-1) 303 hup://kiado kiskapu.hu/ e-mail: kiado@kiskapu hu ISBN: 963 9301 86 8 ‘Késziilt a debreceni Kinizsi Nyomdiban, Felel6s vezet: Bérdds feinas TARTALOMJEGYZEK \.rész_ Alapok 1.6ra PHP: ane eee a pert 3 Mia PHP? , Mire val6 a PHP? PHP 5 djdonsigai A Zend Engine Mien a PHP? ..... A fejlesztés sebessége A PHP nyilt forriskoda Teljesitmeny . Hordozhatosig ., A kinyw misodik kiadiisinal ‘Osszefoglalas ... Kérdezz-felelek Isméilés .... Ismétlé kérdéscke Valaszok .. ‘Gyakorlatok 2.6ra APHP tolopftése 11 Opericiés rendszerek, kiszolgildk, adatbsizisok . APHP és a kiltinbz6 rendszerck beszeraése APHP tclepitése Apache webkiszolgilét haszndlé Linuxra Aconfigure néhiny paramétere Az Apache beallitisa php.ini short_open_tag . Hibajelentések bealitésat = jordkra vonatkoz6 beillitisok .. A php.ini beallitisainak belyi médositasa - Segivség! . Osszefoglalis: Kérdew-felelek Ismetlés . Ismetis kéndések Gyakorlatok ‘Gra Els6 PHP oldalunk = 25 Eh programunk ..... PHP blokkok kezdése és betele és A print figavény ..- HTML és PHP kel egy oldalon Megjonyaések a PHI kéokban <.- Ossszeloglalis ....65 0056 eee PRDaW SS sees 2 2 13 6 18 io 1» » 20 aa a 23 23 2B a B a 25 28 30 31 aa M | Tanuijuk meg a PHP § hasmnélatét 24 6ra alatt Kerdezeelelek ... ae “ Ta xu Ismetles oe . cig 7 8 [sméald kérdések “ones =-7 sees % Villaszok - tae : . 8 gorlatok brews : st APHP nyely 4.6 Azalkotéelemek = 39 Valoz6k ‘Tipus midositisa tipusitalakitissal <5. akiuisinak eye méxlszered a oe let jelek és kifejeatvek careers ” nek: . 0 ai mdveletek deen eenee . seeneee 0 Onsrelizes . seen ce 41 Osszeteu énkadd miveletek neeeeee st Osszehasonlitis peeeeeee 42 Bonyolukabb Osszehasonli kifefexések Kérehoriea logikal mdveletck segitséjgivel 58 Eegése tipust us niwelése és esikkentése 7 An Ossaetoglatis. . ” Kerdeze-feletek on ” Ismétlés . . eens oa tsmetl6 kere - . a Valastok oe... ce wo Gyakorlatok - a Se on : . on Aa if utasitas else aga nn co 6s Ax if otasitas else aga... . 6 (A switch utasitis . . . . OH oe : ™ - a . . eeweee 71 ce : 7 : . . ” Cikus elhagyisa a becak ulasités segitségével | 74 Kovetker6 ismétlés azonnali elkezdese a continue utasitis segitscgéy % Egymdsba dgyazott ciklusok 00... ,.,, a REGEN ooo n ce ™ Kédblokkok és bina satibe int kimenc Orssaeoglalis eee, anuiuk mag a PHP 5 hasendlatét 24 6ra alatt | v_ Kéndezz-felelek 00.2... Ismeties Isméthd kérdések Vilaszok nibs Gyakorlatok .- 6.6raFiggvények 83. Mit neveziink filggvénynek? Hiri « Puggrények hivisa Faggvények létrehozisa oo... Enék visszaadisa sajit fiigevényekbol .... Dinamikus foggvényhivisok 0.0.2... ccc eeeeeesesese eee Availtozdk hatkore Hoz2slérés vallorSkhor a global lulesse6 segitsegevel =. Allapot megOrzése a fllggvényhivasok kozbtt a stat Iles egiseptr Tovabbi részletek a paraméterekr6l . Paraméterek alapértelmezen énékének megudisa . Valtozékra val6 hivatkozasok itadasa fggvényeknek <<... Hivatkozdsok visszaadhisa flggvényekb i Neéwtelen fogavények Ktrehorisa FUgavények Ketezésénck ellendreése Caspeboglalls': Apherin ea diioniat dimada Rea. isu cases Kérdexi-felelek . .. Jijeebiass.couumanceetoe aitves Ismétlés lemétls keéedések Vilaszok ...... = _ Gynbotinok 0555. ia vs daddneaveaaiqestss 7. 6ra‘Témbék 107 Mit neveztink tombnek? ween ene TOMbOK MerEhORASA esse eee eee ‘Témbok létrehozisa az arrayO Rigaveny sepliséyevel o.oo coco Tomb létrchoziisa vagy clem horziadisa a tombhise cee szbgletes zindjel segitségevel Tomb felioltése az array_fillO Riggrénnyel TAESISSOS WMDOK ese eevee eee eeeeereceeeeee - ‘Tarsitisos Wimbdk lérehozdisa az arrayO figgveny segitségével ‘Tarsitésos tmbok létrehozdsa és elérése kéizvetlen értékackissal ‘Tobbdimenziés tombk .....----- weeeeee ‘Fombuk elerése .... esas tet ‘Tomb méretének lekérdenése ‘Tomb bejanisa ‘Tirsiuisos timb bejirisa .......eesceeeee ‘Tobbdimenzids t6mb bejirisa Be ‘Tombok vizsgalata a print_r() faggvénnyel an Miveletek tombokkel 0.50 cc ee ee eee . Kei wimb egyestiése az array_merge0 1 Egyszerre wobb elem hozzdadisa egy timbbiz AtclO clem eltavolitisa az array_shiliO figgvény sepitsegeve ‘Tomb részének kinyerése az array_sliceO fOggvény segilsegevel . - 108 ho ho 1 ied 1a 13 14 1s 116 uy 9 121 121 121 -1az 123 i) Tonk mag a PHP 5 hasonditt 246g a 124 “en derése oo... seer ee ener Bae 7 " ema indexelt timb rendezése a sort fugavény segitségevel » ae eB Tuntisos lomb rendezése énék szerint az asont fogaveny seRitseREE << 0-06) cre ltdace tombs rendezése kulcs szcrint a kon fggvény segitsegevel » «<<... 1° Fliggvények ~ ismétlés .. . a a ince a vos «= 16 Osszefoglalis oo... es Kérdezz-felelek we Ismétlés ...- “ i IsméulG kérdések Vallaszok . ‘ue Gyakorlatok 8,6raKarakterléncok kezelése 131 Karakterkincok formdzisa ..000.0-++++ A printi() fogavény hasenélata . A mezdsrélesség meghatiroxisa - Paraméterek felcserélése Formizott karakterline tirokisa letesebben a karakterlincoke6! regek indexclise a eaneees sréveg hosszdnak megillapitisa az strlenO fiigevénnyel Sainegrész megkeresése az strstrO fOgavénnyel Resaline elhelyerkedésénck meghatdrozisa az strpos() faggvénnyel Sedvegrészlet kinyerése a subste() fuggvénnyel . Karakterlinc clemekre bontdsa az strtok0 fiigavénnyel Akarakterlincok kezelése sp tee asieevearsesn Szdveg tisztogatisa a trim() é az ItrimO foggvényekkel .... 6... arakterkine részének lecserélése a subsir_replaceO figevénnyel Az dsszes részhinc lecserélése az str_replaceO figavénnyel Kis €5 nagybettk Kt WARS ooo eee eee sees - Sondrések kialakivisa a wordwrapO és az ni2brO figavényekkel ......- Karakterlincok tmbbé alakitisa az explode) fggvennyel 16 Szimok formézisa sevegként inate : - 10 Osszefoglalis 0.00.0. . Tecrwaeesseeuesynensaessy o 14 Kérdeznfelelek ooo eee . i ISMEMES vcs scee ee 185 Ismétlé kérdéseke 155 Vilaszok .. . 188 Gyakorlatok . 150 8. 6raObjektumok 157 Mit neveziink objektursnak? 158 Objektum Kétrehozisa 158 Objektumtulajdonsigok 10 Az objektumok tagfggvényei Loo Objektumkonstruktorok . . a 2 Az objektumtulajdonsiigakhoz walé hozeiférés korlitozisa 168 Az objektumok taghiigevényeihez valé hozziférés korlitorisa 168 107 108 Oreikcléss Ataghiggvények parametereinek korkitozisa tipusjelzésekkel Aszil6 tagflgevényeinek feldlirisa Feldlirt tagfigevény meghivisa Akonstrukior Osatilyok és objektumok ellendraése Egy objektum osztilyanak megillapitisa . Egy objektum esakidjinak megillapitisa ... Osztily vagy tagliggvény Ketezésének ellenGreése Beemekt fijlok amtomatikus bet6ltése az _autoload) flesrénaye Objektumok tirolésa é kinyerése Osszefoglalis . Kérdezz-felelck Ismédlés : Ismétls kérdések Vilaszok . Gyakorlatok . I rész_ Munka a PHP-vel 10. 6ra Grlapok 185 Szuperglobilis valtozok A S_SERVER tmb . Adatok bekérése a felhasznaioxoi Felhaszndl6i adatok beemelése a globilis haiGkérbe Urlap elemeinek elérése felhasznal6i tmbokkel . PHP és HTML kéxd Usszekapcsolasa egy oldalon . Allapot memtése rejtett mezdikkel ees A felhaszndlé dtirinyitisa ...... Fajlfeltolts Grlapok és Programok Osszefoglalis . Kérdezz-felelek . Ismétlés Ismétls kérdések ‘Vilaszok . . . Gyakorlatok .... 11. 6ra_—_Féjiok haszndlata 207 lok bedgyazisa az include() utasitissal Endk visszaadisa beigyazott dokumentumbél ooo... cscs cece Az include © haszndlata vezérlési szerkezeteken bell Include_onceO ..... Nagyobb programok kezelése az include_onceQ €s az nce path segitsegevel Fijlok vizsgdlata....... Fal kterésenek dllenreése a fi Fijl vagy kOnyveir? Fijl dllapotinak lekerdezése ... tte ideeaw one Fil méretének lekérdezése a filesizeO Figgvennyel ooo... sss cscs.. Fail détuminformacibinak lekérdezése 7 Tobb féjlulajdonsigot egyszerre megadé fggvény Fajlok létrehoziisa és worlése Féjl megayitisa irisra, olvasisra, hozzifGzésre Olvasis fajlbol er are re: exists) fuggvérnye -181 170 v7 172 173 274 174 . 178 178 179 179 179 186 - 186 188 190 1 193 195 197 200 208 204 204 204 204 205 208 209 210 22 22 244 244 214 24 215 215 216 218 21s 219 _ vi Tlic PE Shs 24a ath Sorok olvasisa fijbol az fees & re fT Teisz6leges mennyiségd adat olvasisa fajb6l .- =. - ijl karakterenkenti olyasisa az fgeteO fgavénnyel « Fijl tantalmanak beolvasésa a file_get_contentsO sepitségeve Fijlba irs é hoezafGzés .. so pes Fijlba iris az fwriteO és fputsO figgvényekkel - Adatok failba itisa a file_put_contentsO foggvénnyel Fajlok zirolisa az flockO faggvénnyel « ‘Munka konyvearakkal bea ee Konyvtir kétrehozsa az mkditO fuggvénnyel Konyvuir torlése az mdi figevénnyel Konyvuir megnyitisa olvasisra. Konyvtar tartalminak olvasisa ‘Osszefoglalis 12.éra ADBA fOggvények hasznéiata 231 ‘Mi van az elvont réteg mOgou? wee Adutbiizis megnyitisa Addatok felvétele az adatbsizisba Adatok médositisa az adatbazisban . Adatok kiolvasisa adatbyézisbot lemek meglétének lekérdezése Elem trlése az actathaisbol . , Osszetett adatszerkezetek tirokisa adatbsizisban Egy pékla.... Osszefoglalds Kérdeza-feleleks Ismetles Isméi kérdések Valaszok .. Gyakorlatok 13,6ra Egydttmikdés adatbévisokkal- SQL 251 \(Nagyon) révid bevezetés az SQL nyelvbe .- Csatlakords a MySQL kiszolgilhez . Az adatbizis kivilasatésa " Hibakeresés ...... Adatok hozadadisa ablihoz eae ee Automatikusan novekv6 mez6 énékének lekérdezése Adatok lekérdezése . Azeredménytibla sorainak szima Az eredménytibla elérése Adatok frissitése cscs ccc s css SQLite; a konnydsilyd SQL motor januljuk meg a PHP § haszndlatat 24 Gra alatt bc ‘Tabla Kétrehozisa SQLite adatbazisban . cence ens 267 Adatok felvétele és frissitése / / 268 Adatok kivilasztisa ... - 269 A PEAR:DB csomag hasznilata ite - . 270 APEAR:DB csomag telepitése o.oo... ccc 270 Munka a PEAR:DB csomaggal 000.022.2000. —— oo PL Osszefoglalis . . : co ceeeee OTF Kéndezrfelelek ...... voceeneee 276 Ismetlés 2... 22. 276 Isméud kérdések «276 Vallaszok ....... Veale Yeu viswd wi weeenee cee eee B70 Gyakorlatok as ce mT 14. dra Kapesolat a killvildggal = 279 Kimyezeti viltozdk - részletesebben ..... A HTTP dgytél-kiszolgalé kapesolat rvid ismertetése A kérele . Avilasz .... . Dokumentum letoltése tivoli cimeé! = Atalakitis IP cimek és gépneveh kbeitt ..... . . Halézati kapesolat létesitése Be NNTP kapesolat léteebordsa az fsockopenO-nel Levelktkiés a mail fiiggvénnyel Bevezetés az adatfolyamok haszndlataba . . oe Adatfolyamok és kOmnyezetek . Ismetlés 0. Ismeétld kérdések Walaszok ...-- Gyakorlatok ... 15. 6ra_ Dinamikus képek kezelése = 303 A beillitisok ellendreése a gel_infoO segitségével ain Képek Idtrehozisa és megielenitése Doccee nett ee eee eee ee BO: Astin beaillitisa . . - - 301 Vonalak rajzolisa feeseaee ce - 308 Alakzatok kitdltese . co a0 Keriv rajeolisa oo. 00sec eee eeee sees eee - 310 Téglalap rajzokisa 202... - . cs 23 Sokszig rajzolisa : oe a 312 Assainek dtlitsz6va tétel bs ces aia, Srovegek kezelése - : 314 Inds képre az imagestringO foggvénnyel vos 3h A TrueType betttipusok hasznilata . ce 315 Sebveginis az imageTTFtext© Figgvénnyel ........ + : ais szoveg kiterjedésének ellenGraése az image TTFDDONO MOggvennyel 317 ‘A fenti elemek Ssszexyorisa coe oo 321 Osszefoplalis Kérdezz-felelck 327 x| Te meg a PHP 5 hasmnélatét 24 6ra alatt wee BES Ismétlés: sen ee eee emer ee sete vee are. "ym Ismetlé kérdések * “ oS Vilaszok - weeeeeee oe - wos Gyakorlatok . a . . + 16. dra Détumok kezelése 329 on A datum kicke timeO fggvénnyel 2-5 see eeeees 0 Az idabelyeg atalakitisa a getdateO figgvénnyel . ae ee Ax idobélyeg dtalakitisa a dateO) fggvénnyel - i Kdobélyeg készitése az mktimeO fliggvénnyel - : 25 ‘A ciitum ellendraése a checkdateO fiigevénnyel . - . 26 Egy pela... cc ceceeey eens ere ee eens . 236 A DatumBejaro osatily ..- . . . . . . seeee “ ‘A GyorsNaptar osztily .. wecsbsee en at . 2 A DatumNezoSeged osztily .. . . be sa Ax igylélprogram kidia Lenyilé ditumlista készité Osszefoglakis ....-..- : Kerdezz-elelek . Ismétkes eee rete Ismetld kérdések ov... eee Vilaszok ..... = Gyakorlatok .- ce . ‘17. 6ra —Objektumok haladéknak = 353 Objektwmok és dllanddk a Statikus tulaydonsigok «0.2... Statikus tagfiggvények ...... . ‘Objektumtulajdonsigok és tagingavenyek hivasainak elfogiisa - Végleges tagliigevenyek ....... oe ‘Takaritas destruktorokkal ooo... Hibakezelés kivételekkel - ni kivéxelosztalyok Kerehozisa ... Eszkz6k objektumbierarel séher . Elvort osztilyok Felilletek - ‘Objektumok dtadisa parame Osszeforta Kérdezz-felelek Ime . . Isméuld kérdések Valaszok . Gyakorlatok oo... 2... 18. 6ra. A szabélyos kifejezések haszndlata 381 11 tipusd szabslyos kifejezések , Mintik keresése a preg_matchO fiigevénnyel tetesueees 2382 Teljes kong kerests a preg_match_allO figavénnyel - / 390 Mintik lecserdlése a preg replace) fiigavénnyel .. 398 Tanuljuk meg @ PHP 5 haszndlatét 24 ra alatt xd Mintamédositak ....., apices BOR sci vveesesee 394 Mintak eseréje a preg_replace_callback( figgvénnyel , see 7 Karakterlincok felbontisa a preg_spliO figgvénnyel 000002 398 Osszefowlalis i Porat cease . 399 Kérdezz-felelek ‘ keener cece e eee BID Ismétlés ‘ tiie tend ven na ene 399 Ismatlé kérdések bo is asec ofoe 399 Valasz0k 6. ae eeeeeeneee’ Gyakorlatak . eee, arnamtetlisn teas ¢v'e 400 19. 6ra ‘Alaptn cea sth sora karatainekial 401 Si a satik felepiiese weeee Siitik bedllitisa a PHP-wel .... . . . . ‘SOU Wrlése ... . Munkamenetazonosit6 stitik létrehorisa = oo Példa: Webhelyhaszndlat nyomon kOvetése 0.0... Lekérdez6 karakterlincok haszndilata _._ Beato Lekérdez6 karakterline késeliése ... Osszefoglatis ... . one . Kerderz-telelek : Isméilés : . Tsmétis kérdéseke - SOK wee se eeeneneenene korlatok 6ra__Allapotok térolésa munkamenetfliggvényekkel 419 Mik azok a munkamenctfiggvények? Munkamenet inditisa a session_start() filggvénnyel 0.60.6... Munkamenet-wiltozok nek Wrlésee A munkamenet és a valtoz6k beiegyzés ce 126 Munkamenet-azonositék a lekerdez6 karakterlincban 27 Munkamenet-vilioz6k kGdolisa és visszafeit ies Osszetogl tebeadivesntestteas 129 Kérdezz-felelek - 420 I és Serer ere e eee ee nen eee eneneneee 430 Ismet KEUESCK ec ee 4% Vilaszok . . . 450 Gyakorlatok . we RO 21. 6ra— Munka kiszolgéi6i kémyezetben 431 Folyamatok éaszekotése a popen0 és proc_open0 faggvényckel ast Parancsok végrehajtisa az exeo() figgvénnyel 438 Kils6 progeamok futatisa a systemO Agevénnyel vagy az“ nvlveleti jel segisegerel 439 Biztonsdgi rések megszintetése az escapeshellcmdO figgvény haszndlatival ........ 440 Kols6 programok futtatésa a passthrud foggvénn Kils6 CGI program meghivisa a vieual() figevénnyel Osszefoglalis ee Kérdeze-felelek Ismélés smetlé kérdések - Valaszok ; 22.6 XML MT Miaz XML... 0. ML elemzofaggvenyek Az elemadazonestok megszeraise XML eseménykezeldk beillitisa --.- ‘Az xml_parser_set_option) fgevény A dokumsonimk clemeisg seen Abhibik jelentése E ida... aes 2 DOM XML figgvények hasenélatiba A DomDocument cetera ee A gyokérelem ‘Gj DomElement objeltumoke ho Informaciok kiolvasisa a DomElement objektumok! ‘A szvegcsomépontok vizsgilata . Ket médszer a fk bas . Az XSL réviden ... " APHP &3 az XSL. Egy XSLdokumentum .. ‘Az XSL alkalmazisa XML dokumentumokra a PHP Psepvegéve Bemutatkozike a SimpleXML . Osszefoglalés «2... cee+ Kérdezz-felelek Ismétiés . 2... Ismétis kérdéseke Vilaszok .. Gyakorlatok 1V. rész A PHP bévitése 23. 6ra_—- PEAR: ne elemek a PHP oe nivelésére 475 Miisa PEAR? APEAR telepitése ... APEAR é$ a csomagiai Egy csomagtelepitése ..... Nehany PEAR csomag mkésdés kozben Az Auth csomag so... ‘APhpDocumentor csomag A beiilltéfijlok szerkesziése a Config csomagga APEAR és sajtk6dune Kéédolisi mintik ‘Tenuljuk meg a PHP 5 hasznélatét 24 éra alatt | xi 24, ora Kensrendeonrnagvoth programcking 801 Alapelvek és problémik A Controller objektum . eects, A RequestHelper & DataStore osztilyok - ACommandFactory osttaly = eee A Command osatily A Dispatcher osztdl Akereirendszer mikidése ATaskFacade objektum ... if 7 A Command osztily Anézetek ... . Hogyan tovibb ~ és érdemes volte? Osszefoglalis : -felelek : a Ismetls kérdések 0.00 Be Valaszok Gyakorlatok .... Sréseedat 533 Targymutaté 541 xiv | Tanuljuk meg @ PHP 5 hasznélatdt 24 6ra alatt Ajanlés Apdninak, akinek ex a kénye is tetszett volna. A szerz6r6l Matt Zandstra a kiszolgdl6programozas terletén dolgozik tanacsadéként, é az rermetes alkalmazasokat tervez6 és fejleszt6 Corrosive Web Design céget vezeti (http://www. corrosive .co.uk/) Ozleti partnerével, Max Guglielmindval, Mawet: objektumkozpontd programozas valamennyi tertilete érdekli, és jelenleg vill programiervezé kat fejleszt a PHP 5 szimdra, Amikor nem konyvet v: illetve Java kddot fr, fld6nkivill timadékra lovoldz a parkban né inyéval, Hollyval. Matt Nagy-Britanniaban, a tengerparti Brightonban él tirsival, Louise McDougallal, és két gyermekikkel, Hollyval és Jake-kel. KGsz6netnyilvanités Mint mindig, a legnagyobb készOnet kedvesemnek, Louise-nek jar, 3 mikor kell abbabagynom a munkét. Lanyunk, Holly, akkor sziiletett, amikor ¢ kon’ ‘els6 kiadldsit tam, flunk, Jake pedig a masodik kkiadsnal, Ok hirman jelentik a vildgomat, K6sz6n6m mindenkinek a Sams kiad6ndl, hogy segitettek a sziveget és a kod idében formaba dnteni, Killén készonet jr Shelley Johnstonnak, George Nedet €s Steph Foxnak, valamint Megan Wade-nek, aki nagyon nehéz lett volna, cba szedte a kOnyvet. Nelkilik Aa Ins gyakran elvonja energidimat az egyéb teendéimtdl, ce szerencsére a Conon” nil kimogaté munkatarsakra és baritokra leltem, Hosert avollétem alatt Max Gualielmino és Tolan Blundell csodlatosan helyetesitettek a frontvo Iban. il, a PHP-r6l sz6, de progra- 6 lapokon nem jut elég hely egy | PHP dsszes lehetOségének és elj tabilhat6 lépések elég informaciét , gyakorlati tudast ad a PHP programozisi n korabbi programozasi tapasztalatea nines s7Uk | mar dolgoztunk korabban, az egyes leckékben yely. Ahhoz, hogy a leheté legtébb hasznat vegyiik : rendelkezni a Vildgh4l6rdl és kilondsen a HTML- nk, akkor is hasznos lehet e konyv, bar meggondolands Ha kényelmesen létre tidunk hozni egyszeni HTML akkor elegend6 tudassal rendelkeziink. igen egyszeri. A kényv néhany példiijiban SQL b= Az SQL nyelvet réviden ismertetjik, de ha komolyal y Kn latbaziskezel6 szolgiltavasokat, célszerd elmélyed sliteneten seétios beveze5 sin SL nme cr (4sokat mutatja be. Ha még nincs progr: ‘ezta részt kilénds figyelemmel olvassuk! xvi Tanuljuk meg a PHP 5 haszndlatat 24 éra alatt 2 részletesebben ismerteti a PHP lehetGségeit, felsorakoztatva. és megoldkisokat, melyekre saiikségiink van, ha gyakorlott PHP- A harmadik Fé fiigavényeket k rogramozOk szeretnénk lenni. i E ‘| ee an seats seve a progrimkonyvtirak kédjaival foglalkozik. Megvizsgaljuk mind i konyvtirkodokat, mind a PEAR kédtir altal nytjtottakat, 1 programjainkban felhasznalhatunk, art és egy egyszerd paranesfajl futtatistig az elsctel a vezeti el az olvastit Az els6 res; nélyes honlaptél a portélig” cimmel bemutatja a PHP sorol fel amellett, hogy miért + Azelsé lecke .PHP: sz lorténeteét és képességeit, ¥ pint néhany érv érdemes megtanulnunk a PH * Amasodik lecke A PHP te igvezeti az olvasét a PHP telepi- tésén UNIX renclszeren, valamint azon forditisi és bedllitisi lehetéségekkel fog- lakozik, amelyck a koyezet k npontjabdl fortosak lehetnek. * A -harmadik lecke Els PHP oldalunk” cimmel bemutayja, hogyan épithetiink PEP koxiot HTML oldalainkba és hogyan késeithetiink a béngés26 szimvdra ki- menetet adé programot A miisodik részben a negy vets elemeit dikt6l a kilencedik leckéig megismerjik a PHP nyely alap- mmel a PHP alapjait mutatja be. A lecke 6k, az adautipusok, a mdveleti jelek (operitorok) és a kifejezé- anyagit a sek képe! * Ax otdik lecke Veer mek utasit atin m +A hate targyalia. tedik lecke -Témbik" cimmel a lista jellegid adatok tiroldséea haszndlhaté ‘pussal foglalkozik, valamint a timbdk haszndlatéhoz néhany PHP- yt is ismerten idik lecke .Karakterkincok kezelé senilhatd figavényekkel foglalkozik, cedik lecke .Objektumok” cimmel bemutatja a PHP osztily- és abjektum- timogatasit, Ebben a leckében egy makadé példa i gorest alii az objektumok haszndlatit, igs i szetkezetek” cimmel a programok futisit vezérld ele- (nyelvtanaval) foglalkozik. Az if és switch szerkezetek és while ciklusvezérlé elemek haszndlatit ik lecke .Figgvények” cimmel a figevények készitését és hasznalatit cimmel a karakterlincok kezelés¢- apok haszniilatat, vagyis a felhasz- _Megtanuljuk, miként érjik el ja a Fajloknak és kényv- " cimmel a PHP DBA- cel) foglalkozik, amely s adatbizisokkal ~ SOL” cimmel réviden mint bemutatja a PHP-ben a MySQL adatbizis- ‘a PEAR:DB csomaggal val munkaloz at a kOlvildggal” cimmel a HTTP kérelmeket ve- hal6zati fliggvényeit ismeneti s képek kezelése” cimmel a PHP képkezelést le- objektumok” cimmel a PHP 6j és az ij objektumkézponti programozisi szolg: tasokat A szabalyos kifejezések haszndlata” cimmel bermutatja tok rarolisa munkamenetfiiggvényekkel” cimmel az at a PHP beépitett munkamenet-kezelé figgvényeivel »Munka kiszolgil6i koryezetlen” cimmel a kills prog- netiik felhaszndlisinak lehetéségeit mutatia be. ce XML” cimmel a PHP XML-tamogatisit vi (Parser) fiiggvényeket, valamint olyan halado mint. DOM és az XSLT. A negyedik részben ~ anyely magiin, hogy programkényvtdrak néhany példat is m A huszonnegyediikt ssajat kOdtarat épittink, & m a Front Controller vallalati hhasznositjuk, Végezettil, a kétetet sz6szedet zArja, jellegd szakkifejezések NI Ww 1 Alapok PHP: személyes honlaptol a portalig Ebben a leckében a kévetkez6ket tanuljuk meg Mia PHP? + Hogyan fejlédent a nyelv? + Mik a PHP 4 Gjdonsagai? + Hogyan tehetjik opt + Mint pont a PHPA vi iss a PHP jasszuk? Ebben a kiinyvben végigtekinijtik a PHP nyely 9 4) Lrész * Alapok Mi a PHP? APHP ny amely személy nilndit eredleti jelentdségén. Sziletésekor csupdn egy makrokészlet volt, honkapok karbantandsira késziill. Innen ered neve is: Personal Home Page Tools. Késébb a PHP képességei kibGviiltek, igy egy Ondlléan haszndlhaté prog- ramozisi nyelv alakult ki, amely képes nagyméret webes adatbdzis alapd alkalmazi- sok makddtetésére A PHP nyely népszenisége képességeinek bévillésével folyamatosan nétt, A NetCraft clemaé cég (http: / Awww wnetcragt .com/) felmérései szerint a PHP 1999 novemberé- ben tabbs mint | milié kiszolgéldn hasanaltik, Ez a sziim 2001 szeptemberére 6 milliora ugrott, 2003 oktaberd! Hlitélag majdnem 14 millié gépre telepitenek a PHP-t. A Security PHP a legnépszenibb Apache modul, a moc!_sslt, 1 Perlt és FrontPage-ct is maga mégé utasitva, Josan a PHP: Hypertext Preprocessor elnevezést hasznalja. Tulajdonképy paranesnyelv, amit jellemzGen HTML okdalakon haszndlnak. A hagyor iétben azonban a kiszolgalé.a PHP parancsokat nem kildi el az tigytélnek, azokat a kisrolgilé oldakin a PHP-€ntelmez6 motor dolgozza fel. A prog- ramjainkban lévé HTML elemek érintetlentil maradnak, de a PHP kédok lefutnak. A ké- dok végezhetnek adatbizis-lekérdezéseket, létrehozhatnak képeket, fijlokat olvashatnak és irhatnak, kapesolatot létesithetnek tivoli kiszolgal6kkal - a lel cack szima vegte- len. A PHP kédok kimenete a megacott HTML elemekkel egytitt keril A PHP hi A APE ' parancssori alkalmazasként is telepitik, igy kivdléan alkalmas kiszolgiléoldali ncsfajlok készitesére. § 1 PHP-t hasendilja, pedig ezt a fel oldowik me; latot hagyomdnyosan Perl- vagy héjprogramokkal Mire val6é a PHP? Amidta csak Iétezik a Viligh4lé, mindig is sz Programokra. Ahogy az ut6bbi években a cinamikus tartalmat szolgi inant igény novekedeu, Ugy vilt egyre égetObbé a szilkség arra, hogy a nagy mérctd kornyezeteket minél gyorsabban és hat¢konyabban lehessen felépiteni. nas gyors kiszolgal6i eszkizik készi chéz dolgox- nk, kOnnyen biztonsagi hézagok alakulhatnak ki. Az eredeti- leg szbvegfeldolgozisra tervezett Perl természetes vilasztésnak tint a di Kornyezetek semana; sokkal kSnayebben alkalmazhato biztonsigosan, sisigit ellenstlyozza az a tény, hogy rendkivill gyorsan lehet fejleszteni benne, & is mellette sz6l, hogy magy szam6 stabil kodkOnyvtar érheté el hozzi. ; 1. 6ra * PHP: személyes honlaptél @ portlig | 5 Hol léphet hit be a képbe a PHP? Nos, a PHP+t kifejezetten a Vikighsl6ra inak, igy azokra a problémikra, amelyekkel a welprogramoz6k nap mint nap szembesilnek, magiban a nyelvben megtakiljuk a megoldisokat. Mig egy Perl-programoz6nak kuils6 kényvtirat kell hasznélnia vagy kédot kell imia a weblapok Kitogataitél érke26 adstok kinyerésére, a PHP ezen informaci6kat automatikusan elérhetéve teszi, A Perl-progra- moz6nak modulokat kell telepitenie, hogy adatbazis alapt: kérnyezetet hozhasson kt- re, a PHP azonban beépitett SQL adathaziskényvuirat kindl, és szdimos mas adatliizis~ fajtat is OnmOkGdGen Limogat, Roviden tehat, mivel a PHP-t webprogramozoknak ké- seitewék, szinte minden jellemz6 problémara megoldist nytixé flggvényeket tartalmaz, a felhasznaloi munkamenetek kezelésé@l az XML dokumentumok feldolgozisiig. Vajon e konnyi haszndlatért még lassabb végrehajtissal kell fizetntink? $26 sines réla A PHP-t dgy tervezték, hogy modulként futtahaté legyen szimos kiszolgat6i «lkalma- zissal, ami azt jelenti, hogy a CGI paranesfajlok lassi indulésihoz hasonlé egyaltalin nem jelemkeznek. Az pedig, hogy az dltalines feladatokat a PHP-vel vege: tethetik el, felszabaditja a programozékat az aldl, hogy segédkOnyvtirakra kelljen maszkodniuk, ami rontja a teljesitményt. Termeészetesen a PHP is rendelkezik prog kényvtirakkal, A Perlnek ott van a Comprehensive Perl Archive Network (CPAN nek pedig a PHP Extension and Application Repository (PEAR), melynek csom vabb bdvithetok a PHP képességei. A PHP 5 djdonsdgai A PHP 5-5s viltozata szaimos — a programozék életét megkOnnyit6 ~ uj szolgaltatissal rendelkezik. Nézzik ezek kéziil a legfontosabbakat (hha a felsarolisbal még nem ér tink til sokat, ne aggédjunk — 3 szolgiltatisok mindegyikét részletesen tir gyaljuk a kinyvben): © APHP-be immér beépitenék az XML timogatasit. A kilénbor6 XML-ke fagavények és osztdlyok a hattérben mind ugyanazt a konyvedérat (libem!2) hase niljik, igy az: XML-szolgihatisok stabilak és egyméssal egydttmakddni kepesck © APHPS tartalmazza az SQLie SQL-kinyvtirat, a munkihoz szikséges minden faggvénnyel egyiit © Tamogatond vilt « privat, illewwe védeut tagiigevények és tulajdonsagok lata az osztdlyokban, Az osztilyillandok is tamogatottak. A faggvénycknek és tagfiigavényeknek atacot objektumok hivatk adédnak at, nem az objektum misolataként, ami jelentésen cskkent lehetéségét az objektumkéizpontii kodokban. © APHP 5 tamogatia a sutikus tagfiggvényeket és tulajdonsigokat, igy bonyolul- tabb objektumkézpontd programfelépi * Atagfiggvényeket bevezetheik ug) veteljenek meg. kent pik hogy bizonyos objektumtipusokat k6- es ep rs most mir ellendrai, hogy két hivatkozis ugj.n,, . ‘Az Beszehasonlé miele earn ome! ani az objektunka” rt az objektumra mutate. «A PHP immér tamogatja az elvont osztilyokat & felGleteker, Ar emlitett szolgiltatisok legtbbje egyben azt is tiikrdzi, hogy a legfontosabb ylio. zisok a felszin alatt kovetkeztek be. A Zend Engine A PHP 3 készitésekor az alapokt6l indulva teljesen Gj feldolgoz6egységet irtak a nyely. h §P 4-ben pedig hasonléan forradalmi djités volt megfigyelheto a programokar futtaté magban. ‘A Zend Engine parancsmotor a PHP modulok mégott talilhat, a programokat funaio clneverése. Kifejezeten a teljesitmény jelentés ndvelésére és a bivithetdséget szem el6tt tartva fejlesztették ki AP 5-ben talilhato Zend Engine 2 ismét alapvetSen noveli a teljesitményt, A ZE2 i tal hozott viltozdisokat mar érintewik, amikor az objektumkézpont programozis ti- nak jelentGs fejlGdésérdl beszéltiink, A PHP torénetében eldszér a nyely objektumek és az objektumkézpontd mintik alkotfik, igy a PHP még inkabib alkalmas felilené vilt a nagy, vallalati alkalmazasok fejlesztésére, Miért a PHP? Van néleiny megcdfolhatatlan érv, amiért a PHP-t érdemes valasztani. Ha mis program- nyelveket is ismertink, szzimos alkalmazis fejlesziése sondn észlelni fogiuk, hogy a prog ramozsi szakasz érezhetGen gyorsabb, mint varndnk. A Corrosive cégnél a PHP-t 4 Javat is haszndljuk, A PHP mellett akkor dontiink, ha a stabilitas feldldozisa nélkil syorsan eredmenyt szeretnénk ltni. A PHP, mint nyilt forriskédd termék, {6 timogatis- sal rendeliezik, amit a képzett fejlesat6i garda és az elkételezett kOzOsség nytt szi- ‘munkra, Réaddsul a PHP a leglontosabb opericids rendszerek birmelyikén képes fui, at legtdbb kiszolgaléprogrammal egyantmakodve. A fejlesztés sebessége Mivel a PHP lehetSséget acla HTML elemek és a programk6dok elklénitésére, a2 sok fejlesatésekor lehet6ség van elvdlasztani a k6doldsi, terverési, és O7e a Hf ielentsen megkOnnyiti a programozdk életét hogy elmozditja a akadilyokat a hatékony és rigalmas alkalmartsok Etter icc cs tar + PHP: szomiyes onapts a potig | A PHP nyiit forrask6da ‘Szimos felhasznal6 szemében a nyilt forrdskddit egyet jelent azzal, hogy ingyenes, ami természetesen mar Gnmagiban is elGnyds. A {él szervezett nyilt forriskédti projektek azonban més eldnydkkel is szolgilnak a fel haszndléknak, FelveherOk a kapesolatot a konnyen elérhets és elkételezett fell 16i kGzGsséggel, ahol szamos nagy tapaszialattal rendelkez6 ember talélunk, Nagy az esély ra, hogy barmilyen problémiival is kertiljdink szembe, némi kutatissal g kOnnyen vilaset takilunk ri, Ha mégsem, egy levelezGilistira kitldot tizenetre hamar érkezik intelligens és hiteles vilasz, Ugyszintén bizonyos, hogy a feldolgozprogram hibsiinak javitisa nem sokkal felfede- zésik utin megténénik, és a felmeriil Gj igényeket kielégité szolgiliatdsok is ha beépalnek a nyelvbe. Nem kell virni a kévetkez6 hivatalos kiadisra, hogy fejlesté- sek el6nyeit élvezzik Nincs a PHP makécketéshez egyedileg kivélasziott kiszolgalé vagy opericids rend- seer, Szabadon villaszthatunk olyan rendszert, amely kielégiti sajat vagy Ugyfeleink ty nyeit, Biztos, hogy kGdunk tovaibbra is funathat6 lesz, barmi mellett ix dontank Teljesitmény A hatékony Zend Engine-nek készdnhet jl vizsgazik a mas parancsnyelvek: kel, példaul az ASP-vel, a Perllel vagy a Java Servletekkel seemben ve tekben. A teljesitmény tovabbi ira beszerezhetjak a Zend Accel pyorstirazé eszkbzt a http://www. zend.com cimrél, amely a leforditou kédot a me- méridban virolja, hogy ne kelljen a forrisfajlokat minden kérele és értelmezni. tL meGresi tes nevid ijra feldolyorni Hordozhatéség A PHP alapvetéen Ggy terve: hogy al val6 haszndlatra, egydttmakodve kolinbéz6 ki Fejleszthetiink UNIX rendszerre és Attérhetink NT pokra minden gond nélkiill A PHP alkalmazisokat kiprébalhatjuk a Sz yes webkiszolgaloval (Personal Web» Server) és kés6bb telepithetjik azokat egy UNIX rendszerre, ahol a PHP-t Apache mo- dulként hasznljuk nos Opericios renelszeren latbaziskezelikkel aL Agot ion h A kényv masodik kiaddsénak djdonsagai A kényy elsé kiad’sa 6ta a PHP megszilarditota helyét a vezet6 webfejlesztési megol- disok kéz6tt. Mint minden mas népszerd nyilt forrast termek, cecceeateneses a PHP is gyorsan viltozik. Az Gj kiadashoz alaposan ellenoriziOk & frissitenak a kétet szdneyer és példait, azon teriiletek ismentetését pedig, ahol Gj szolgiltatisok jelentek meg, jelen- teen bovitettk. Az objektumok, az XML és az SQL tirgyalasat teljesen atdolgozuk, hogy tikrézzék a PHP 5-ben bekévetkezett viltozdsokat- A meglevé anyag atdolgozisa és bovitése mellet Gj témakér a PEAR ismertetése, de kiln fejezetet szenteltink a halad6 objektumoknak, illetve a nagyobb projelaek kexe- lését segité kényvtéraknak is. Osszefoglalés Ebben a leckében bemutattuk a PHP- Lattuk, hogyan alakult ata nyelv egyszer makrdkészletbdl hatékony programayelvvé. Megismentik a Zend Engine, é megnéz- tik, milyen Gj lehetségeket teremt a PHP Gj valtozataban. Végall dttekintettiink n tulajdonsigot, amelyek ellenalthatatlanna webes megoldassd teszik a PHP-. viny Remélem, a bevezetS meggydzte az Olvasét, hogy a PHP nyelvet neki talltak ki. A k6- vetkezd fejezetben bele is vetjak magunkat a mélyvizbe, és telepitjik a PHP-Ertelmez6 motor. Kérdezz-felelek Konnyti megtanulnt a PHP nyelvet? Raviden: igen! Valéban meg lehet tanulni a PHP alapjait 24 éribant A PHP meg- szamlilhatatlanul sok figgvényt bocsat rendelkezésinkre, melyek megvalésiti- séhoz mas nyelvekben sajit kédot kellene irni. Egy programozisi nyelv nyelvtandnak és szerkezetcinek megénése azonban csak az tit kezdetés jelenti. VEgsGsoron a sajit programok készitéstb0l és a hi- catia Jehet igazin sokat tanulni, Ezt a kényvet kiindulépontként é- 1. 6ra + PHP: személyes honlaptél a portilig 9 Ismétlés Ismétl6 kérdések Igaz vagy hamis? A PHP-t eredetileg banki alkalmazsokhoz fejlesztett@k ki.” Mennyibe keriil a PHP? Mia PHP-t mikédteté mag neve? Soroljuk fel a PHP 5 néhdny oj szolgiltatas’ ee Vélaszok Hamis. A PHP-t eredetileg webe: A PHP semmibe sem keri. A PHP-ta Zend Engine 2 parancsmotor mikédteti A PHP 5-85 viltozata (sz”imos mé: ) SQLite-timogatist, javitott XML-timogatist és egy jelentésen tovabbfejlesztett objektummodellt tartalmaz, gok kézzttételére fejlesztették ki. aes fejlesnés mell Gyakorlatok 1 fijuk le azokat az okokat, amelyek miata PHP mellett déntéttink! Az ebben a fejezetben bemutatott szolgdltavisok hogyan segitik majd munkankat? Vizol junk fel két vagy harom projektet ésitani! A kinyvet olvasva jegye7: sithetnek javob meg szeretm yelvi szolgiltatésokat & disaink elkészitéscben! A PHP telepitése Ebben a leckében a kévetkezOket tanuljuk meg: * Milyen feliileteket, kiszolgilkat és adathizisokat timogat a PHP? * Honnan szerezhetjik be a PHP-t és mas nyilt forniskOd programokat? © Hogyan telepithetd a PHP Linux rendszerre? + Hogyan egészithets ki tovabbi szolgaltatasokkal a PHP binaris dllomanya? © Hogyan Allithawk be a fontosabb paraméterek? © Hol taldlhaté segitség, nem sikentil a telepités? Mielétt megkezdenénk az ismerkedést a PHP nyelwvel, be kell szerezniink, telepite- nnk és beillita szerre el nunk a PHP-érelmezat, A feldolgozoprogram szimos opericiés rend het6 és tabb kiszalgalaval is kép er Ag TT Operéciés rendszerek, kiszolgél6k, adatbazisok P tele felilet- (platform-) figgetlen, ami azt jelenti, hogy fut Windows operi- A TH ie et en rendeeren _beleetve a Linoxos ~, st még Macin tosh OS X gépeken is. A timogatoz kiszolgalok kore igen széles. A legnépszertbbek: Apache (szintén nyilt forriskédt és rendszerfiiggetlen), Microsoft Internet Information Server, WebSite Pro, iPlanet Web Server és Microsoft Personal Web Server (Személyes webkiszolgil6). Az utébbi kenté akkor tchet nagy szolgilatot, ha internetkapcsolat nél- kil szeretnénk fejleszteni, bair az Apache is alkalmas erre Windows kGmyezethen. A PHP a legsébb kiszolgil6ra modulként telepithet5, vagyis nem Onall6 alkalmazis- ként, hanem 2 kiszolgdléi folyamat részeként fut, de Sndllé parancssori alkalmaziissi is fordithate. Ebben a kényvben webalkalmazisok fejlesztésthez fogiuk haszndlni a PHP-t, de nem szabad alibecstlni a szerepét altakinos programoz6i eszkozként sem, amely vetckszik a Perllel. Az a tény, hogy a PHP parancssori alkalmazisként futtathat6, azt jelenti, hogy den kiszolgilé, amely tamogatja a CGI parancsfajlokat, képes egydumdkédni vele; a beillitisok kiszolgilénként kGlénbiz6 lehetnek. A PHP4 alapvetGen Ogy tervezték, hogy kOnnyen Ssszhangba hozhaté legyen a kilon. 26 adatbazisokkal. Ez az egyik oka a PHP népszeriiségének a webalkalmazisok ké- scitése terén. Szinte minden jelenleg elérheté adatbazistipus kizvetleniil vagy az ODBC-n (Open Database Connectivity) keresztUl csatlakoztathat6 a PHP-hez. A konyy példaiban Linux operiiciés rendszeren Apache és MySQL programokat hasz- Junk, valamint bemutatjuk az SQLite-ot, ezta konnydsdlyd, de erételjes SQL- konyvtirat, amelyet megkapunk a PHP 5-tel. Ezek ingyenesen letilthetOk az Intemetrdl, és viszonylag konnyen telepithetk egy PC-re. APHP és a killdnbéz6 rendszerek beszerzése A PHP a bt / ieee php.net / cimrél wiktheté le. Mivel a PHP nyikt forrask6d6, ne kell a bankkinydnkat kéznél tananunk, amikor lethjik az éntelmez6t. Magyarorszi- gona hp net/ tkGrkiszolgélét édemes meglitogatni. Ar atts nemo PP ores Ae Hehe ohastuti a bep:/ is. pap. net manual elmen, kiegésttve mas progamozbk. ial stro megiegynéseldkel, Ezen a ci oi bhonlopsbtis Bake cere acimen olvashaio-a magyar PHP kézikonyy is. A PHP 2.6ra* APHP telepitése 13 A Linux rendszer telepitésér6l tovilbbi informicié talélhatunk a kévetker6 cimen http://www. Linux .org/help/beginner/distributions. html. A Linux PowerPC gé- pen is hasznalhat6, a Yellow Dog Linux rendszerrel http: //wew. ye) lowdog! inux.com/..A Mac OS X, az Apple legtiiabb oper re, a Unix BSD-re épiih, igy a PHP-t gond nélkil képes futtatni, Ha OS X-et a telepitésr6l a ht tp: //www. php.net /manual /en/ instal] .macosx.php ¢i tunk informicdt, Magyarorszigon a Linux-kzdsség honlapja a https //we bs renclsze- A PHP Windows rendszeren valé hasznilatdval kapesolitban keressUk fel a www. php.net ‘manual /en/install windows .php cimet. ket adathazis-kezelo= A MySQL aduatlazisrendszer, amely egyike a kmyvben haszn: nek, a http://www mysal com? cimrdl tithetd le, Szimos opericios rendszerre clér het, beleértve a UNIX, Windows és OS/2 rendszereket..A MySQL magyar tikdrkiszol- gildja a http: //mysql .sote. hu/ A PHP telepitése Apache webkiszolg4lét hasznalé Linuxra Ebben a részben végigvezetiink egy PHP telepitést egy Apache webkiszalgilér havzn 16 Linux rendszeren, A folyamat tbbé-kevésbé ugyanez mas UNIX rencszereken is. El képzelhet6, hogy az. dtalunk b tout valtozat is, ig még egyszendbben telepithetnénk az éntelmezé, a P nban nagyabls szabadsigot ad a feldolgoz6ba kertilé szolgaltatisokat illetéen, Miclét megkezdjiik a telepitést, ellendrizztik, hogy rendszergazdaként (root ) jel keatiink-e be a rendszerbe. Ha a kiszolgalét nem érhetjik el root felhasenalokent, duljunk a rendszergazdahoz a PHP telepitésével kapesol = kéréseinkkel A PHD-t kétléleképpen lehet Apache mod a webkiszolgilot és beépithetjGk a PHP-Gnelmezst, misré nt eldallilani. Egyrészt tijrafordithatjuk za PHP dinamikusan Hhatjuk, Ht Apache ki- moxhul haszn: ancl yszenibly méxdia annak, hogy betizeme rgyalni megosziou objektumként (DSO, Dynamic Shared Object) is ford szolgilink DSO-tamogatissal ellitou, képes k ale hogy djraforditandnk a programot jk a PHP4, exén eat az eljérist fogiuk Ha ellendrizni kivinjuk, hogy az Apache rendelkezik-e DSO-tamc tanunk az Apache futathatd dllominyat (yt ype) az -2 paramete seal, el kell inal Jusr/local/apache/bin/httpa -1 14) Lerész © Alapok Hol taldlhaté az Apache? Anvepa, az Apache alkalmazés, a rendszeren kilénbéz6 helyekre telepithet6. ‘Az egyik szokasos hely a /usr/local/apache/bin/httpa, de a kiszolgalén mashol is lehet. Ha a hely az ismert elérési utak listéjéban szerepel, lehet, hogy ‘a program elinditésahoz nem is kell a teljes:elérési utat beimunk; ilyen esetben az Apache példaul igy is hivhaté: pa -1 A program ekkor egy listat ad a rendelkezésre all6 beépitet modulokrél. Ha a mod_so.c elem szerepel a listiban, akkor az Apache alkalmas az alibb bemutatot’ mOdszerrel t6r- tn b6vitésre. Egyéb esetben tjra kell fordi mihez a dokumenticié tanalmazza az Sci. Ssszes satikséges inform ‘Az Apache forditésa DSO-témogatassal Ha magunk telepitjGk az Apache-t, mindenképpen forditsuk bele a OSO-témogatést. Ehhez a beallitéprogramat (con figure) a kévetke26 kapesoléval kell futtatnunk: e --enable module=so Ha még nem tettiik me le kell t6ltentink a PHP legftissebb viltozatit. A tar fajl gzip- ben ell csomagolnunk: pel tméritett, igy el: php-5.x.%.tar.gz Ha sikeresen kibontottuk a csomagot, lépjiink at a keletkezett konyvuérba: hp-5.x.% Ebben a kOnyvidirban talalhaté a configure program, melynek a megfelel6 kapcsolk- kal megadhatjuk, milyen szolgiltatasokat épitsen be a PHP-be. Ebben a példiiban csak néhdny hasznos paranessori kapcsolét adunk meg, de természetesen szimos més | tség is rendelkezésre All. Késébb megnéztink néhany tovabbi elemet a configure Paraméterei kozi nfigure \ @£ix=/home/usr/local/php5/ \ th-mysql \ th-apxs=/usr/local/apache/bin/apxs \ th-xsl \ --with-gdbm \ th-gd \ ~-with-freetyp. ~-with-zlib-di wewith-tef \ ~-with-jpeg-dir=/usr/1ib ‘usr/include/freetype/ \ ‘usr/include \ 2.6ra * A PHP tolepitése | 15 A PHP telepitése az Apache 2-re af A PHP-t jelenleg az Apache 2 helyett javasolt az Apache 1.3-mal futtatni, de az Apache 2-haz vaké telepités menetérdl részietes leirast talathatunk ahetp: //www.php.net /manual /en/install.apache2 -php cimen, A telepitésben a legnagyobb kilnbséget a cont icure program egyik kapesol6ja jelenti: a --with-apxs helyett a --with-apxe2 kapesolét kell haszndlnunk, A példdban azokat a kapesoldkat valasztottuk, amelyek a konyvben targyalt uisok vimogatésihoz szilkségesek. Legtbbjdk bizonyos konyv lia PHP leforditésa elét; a beallitéprogram panaszkodni fog, ha a szlkséges kényvtdrak nem talalhatok, rendszeren. Ha Linuxot furtatunk, é nem tudjuk pontosan, hol taldlhaté irjuk be a parancssorba a locate parancsot, a kivetkezoképpen: locate apxs Ez parancs a rendszeren talilhaté minden olyan apxs karakterlincot. i utat kifr, amely taralmazea az Amikor a configure lefutott, elindithat6 szernek tartalmaznia kell egy C-forditét. make program. Ennek futtatésthoz a rencl make make install Ezekkel a parancsokkal a PHP forditasa és tel beallitaséra és futtatasdira van szikség. pefejerdént, mir esak az Apache A configure néhany paramétere Amikor lefutatuk a configure-t, megadtunk néhiny parancssori paramétert, amelyek meghatérozak, milyen lehetGségekkel mulvizzuk fel a PHP-t. Ha a kibontott PHP exo. mag kényvtéraban a kvetkez6 parancsot adjuk ki, a configure megadia a lehetséges paramétereket: -/configure --help Mivel a lista rendkivill hosszt, célszent elébb egy szivegtajlba irinyitani, igy kényel- mesebben elolvashat6: -/configure --help > lehetosegek.txt 16 Lrész * Alapok Anna ellenére, hogy a fenti parancs kimencte eléggé érthetd, néhany fontos lehetsse- wet meg kell emliteniink ~ mégpedig azokat, amelyek a kényv szempontjab6l szat- kra érclekesek —with-gdbm mu sat forditja bele lonxinyba It DBA-fiigavényekkel valé munkahoz erre DBM nuxot haszndlunk, az emlitett kanyy- n mis IehetdségekrOl is s261 ¢jttink nat6, szidksdg lehet az € Ez a kapesolo AIL leckében tipusts konyvti cirral valdsziniileg rendelkeaiink, dea 12, leckél Ha DBM kényvtirunk nem a szokisos helyen t tit Net megadisira, pékddul igy: with-adbm=/eleresi /ut /a/megfelelo/konyvtarhoz A --with-od a GD kinyvtir timogatasat engedélyezi. Amennyiben a GD kénys lepitve van a rendszeren, ezzel lehetéséget kapunk dinamikus GIF vagy PNG készitesére a PHP programokbdl, A dinamikus: képek eléallitisardl a 15. leckében junk. Ha a GD-t koribban nem az alapbeallitést kinyvtirba telepitetuik, megadhaté a szokitsost6l chtérd gd=/eleresi /ut /a/megfelelo/konyvtarhoz 1 forditis nem j sikerrel, probiljuk meg megadni az elérési utat pesol A GD-vimogatis sikeres beforditisithoz idénként mis-mas kapesoléra lehet ezén eldbb olvassuk ela http: //www.php.net/ga/ cimen a legtrissebb informaciél A konyv irdsdinak idején a zlib tmdérité kOnyvtar (http://www gzip.org/zlibs) elére- si Git is meg kellett adni a GD sikeres telepitéschez. A szokisos hely igy adhato meg: with-glib-dir=/usr/include AGD kényy lefordlituk: fajlokkal is haszndlni szerenénk, ezén ennek tamogatasit is be- with-Jjpeg-dir=/usr/lib Ex az eleérési it az ftps //ftp.wu.net/graphics/ jpeg/ cimrdl letlthet jpeq-6b konyvidr szokdsos telepitési helyére mutat. 2. 6ra + A PHP tolepitése | 17 ~with-freetype A --with-freetype a FreeType | kinyvtdir timogatasit biztositja, amellyel a dinami- kusan létrehozott képekbe betitipusokat 4gyazhatunk. A kapcsol6 csak akkor mdko- dik, ha telepitettik a FreeType 1 konyvtirat, A konyvtirrél részletesebb informéici6 a http://www. freetype.org cimen talilhat6, Ahogy mis kapcsol6k esetében is, ha problémakba tikoznénk, probiljuk meg megadni a teljes elérési utat: --with-freetypes/eleresi /ut/a/megfelelo/konyvtarhoz A --with-mysql a MySQL adathazisok timogatésit engedélyezi. Ha a rendszeren a MySQL nem az alapbeaillitasa kinyvtarban tallhat6, megadhat6 a szokasost6l eltées -elérési tt is -with-mysql-/eleresi /ut/a/megfelelo/konyvtarhoz A My8QL+ a PHP 5-héz mar nem mellékelik, ezért ezt a kapcsol6t meg kel adnunk, ha MySQL adathzisokkal szeretnénk dolgozni. Mint mar tudjuk, « PHP timogat szamos mas adatbirisrendszert is, A 2.1. tablaza exek kozil lithatunk néheinyat, a hozzijuk tartoz6 conf igure-kapcsolokkal. DEM ==with-dbm ‘GDEM it ‘Adabas D. iODBC =with-iedbe ‘OpenLink ODBC with-openlink ‘Oncle —-with-oracle PostgreSQL ~=with-posal, ‘Solid “with-solid ‘Sybase ==with- sybase ‘Sybase-CT =-with-sybase-ct Velocis =with-velocis LDAP ==with-1dap 18 | rész * Alapok —with-xsit A konyv 22, fejezetében szdimos XML-szolgaltatast targyalunk; az ezekhez kapesol6dé PHP-faggvények mindegyike a 1ibsm12 kényvtirat haszndlja, amely elérhet p:/ ferme. xnl soft .oxg cimen, Jelen Allis szerint a szabviinyos XML-szolgdltatisok koziil csak az XSLT-te kell kifejezeten hivatkozni, amikor a bedllitéprogramot furatjuk. A --with apesolora tehat szikségink van, hogy a 22. lecke példait furtathassuk. Az Apache beallitasa Miutan sikeresen leforditottuk az Apache-t és a PHP-t, mdositanunk kell az Apache sit tanalmaz6 httpd. cone fijlt. Ez az Apache kOnyvtérinak cont alkdnyvtir- A kovetke26 sor hozadadisa sikséges: tallha ion/x-httpd-php .php Ez biztositja, hogy a PHP-clemzs fel fogja dolgozni a . php kiterjesztéssel rendelkez fajlokat Ha Ugyfelcink miatt esetleg a hagyomdnyos oldalaknal megszokott kiterjesztéseket haszndlnank, birmilyen kiterjesztést vilaszthatunk. A. htm) kiterjesziésd fajlokat pél- daul a kévetkez6 beillitissal kezelhetjak PHP fajlokként: ieation/x-httpd-php . htm Mewicgyzend6, hogy a .heml kiterjestésd dllomanyok PHP programokként valé keze- lése Ielassithatja a webhely makédését, met a PHP-éntelmezé minden ilyen kiterjeszté- sii oldalt feldolgoz, mielét 4tadna a felhaszndlonak. Ha a PHP eléretelepitve talalhata meg a kiszolgal6n és nincs elérésiink az Apache be- allivisamt tanalmazé fajlhoz, létrehozhatunk egy -htaccess nevi dllomanyt a sajat konyvtarunkban és abban is megadhatjuk a fenti sorokat. A -htaccess fajlok hat kiteried az adott kGnyvtdrra és annak minden alkOnyvuirira is. Ex a megoldis azonban csak akkor makédéképes, ha az Apache Al low0verride beallitisa az adott kimyvtar- 1 nfo Vagy AL énékd, A -htaccess az alapbedllivist fajlnév, amit a kGnyvtir speciilis bedllitisaihoz haszndlha- tunk, de az adott rendszeren mis is lehet. Ezta httpd.conf allomany AccessFileName bedllitisa hatirozza meg, Ez a fijl dhaléban akkor is olvashat6, ha nem rendelkezink rendszergazdai jogokkal a kiszolgalin. 5 fal tkéletes médja anak, hogy testreszabjuk a tirhelyiinket, ha a k téfajljéban nem médosithatjuk a Paramétereket. A PHP mikodéstt kaz- vetlentl azonban a php. ini dllomdny szabdlyozza, 26+ APHPtolepitése |19 php.ini A PHP mikodését a forditds vagy telepiteés utin is befolydsolhatiuk, a php. ini fail hasandilatival, UNIX rendszereken az alapbellitisd knyvtdr a php. ins fajl sedimdra 4 /use/local/1ib, Windows rendszereken a Windows kényvtira, A letohou PHP csomag kOnyvtdirdban talilhaté egy minta php.ini fijl, amely a .gy.iri bedllitésokat tartalmazza, Ezek az értékek épnek érvénybe akkor, ha a PHP nem tall egy php. ini faijlt sem. A php. ini fal bedllitisai egy névb6l, egy egyenl6ségjelbél és egy Ert¢kbdl dllnak, & ket tipusuk van: az érékutasitisok és a jelz6utasitisok. Az értékutasitésoknél (value directive) az utasitds nevét tintetAk fel, majd egy egyenléségielet, utéina pedig egy ér- téket, A lehetséges énékek utasitisonként kikinbdxGek. A jelaéutasitésokndl (Mag direc tive) az utasitis nevét és az egyenléségielet egy pozitiv vagy negativ kifejezés kiveti Pozitiv kifejezés az 1, az On, a Yes, illewve a True, mig a negativ kifejerések a 0, az Off, aNo ésa False, A sz6kGzdket a feldolgoz6 figyelmen kivil haxyia. Ha a PHP eldretelepitve allt rendelkezésre a rendszertinkin, ellendrizzik a phe fijlban talélhaté beallitasokat, Aphp. ini beallitésait barmikor médosithatjuk, de ha feldolgoz6nk Ap: + modulként fut, a viltoztatisok érvénybe léptetéséhez djra kell inditani a webkiszol gd short_open_tag Ashort_open_tag beallitas hatirozza meg, hogy haszn: tuk-e a nivid <2 ect format a PHP kédblokkok iraséra, Ha ez ki van kapesolva, az alabbi sorok val rlyi ket Lithatjuk: short_open_tag = Off short_open_tag = False short_open_tag = No Ahhoz, hogy engedélyezziik ezt a beillitést, a kivetkezd sorok egyik(t kell ha nk: short_open_tag short_open_tag short_open_tag on ‘True Yes API plokkok kerd6- és zéroclemeirdl a kivetkez6 leckében lesz sz. 20 |. rész * Alapok Hibajelentések bedllitasai ainkban, hasznos a hibaiivenetek kiirsisa a HTML oldalba ipbeillitasban bekapesolt vikat kerestink pi gész6 sadmara, Az tizemi (telvit a nagykoziinsé ithat6) kodban kapesoljuk ki a hibajelentéseket, wert ezek drulkodhatnak a védelmi hiinyossigokr6l, és igy megkOnnyithetik a tima- dok dolgit. A végleges kédban ehelyett naplézzuk a hibakat a kévetkez6 beallitassal: Beillithatjuk a hib: 1 kévetkez6r ntési szintet is, A kOnyvben szerepl6 példikhoz a beallitisnak ek kell lennie: Ezzel a PHP minden hibit jelezni fog, a lehetséges problémakat jel0I6 figyelmeztetések ki- vételével, Ez az alapbeiillitis, és j6l kovethetd vele, hogy mi folyik egy adott programban Valtozékra vonatkoz6 bedillitésok A PHP a ésP kérelmekbo), illetve sutikbél létrehoz bizonyos valtoz6kat. Ennek miikddését ilban szabalyozhatjuk. A register_globals beallitis azt hatirozza meg, hogy a HTTP kérelmekkor ezek lhozbk global véliorskként jojfenek ssitett szolgéltatas, re. Ez ma mir hivatalosan elavultnak mi- 4 register_globals alapiillapotban kikapesolt: bals = Off A konyvben szereplé péklaprogramok kozil egyik sem timaszkodik ere a beillitisra, hagyjuk kikapesolt dllapotban, 2. Gra * A PHP telepitése | 21 A php.ini beallitasainak helyi médositasa Ha a PHP Apache-modulként futtatjuk, és a shtaccess fajl haszndlata engedé kényvtéranként is ki-bekapcsolhatjuk a php. ini beallitésait A -htaccess fijlban a php_flag wtasitéssal dllithatunk be egy on vagy Off értékd php. ini-bedllitst, és a php_value utasitassal egy olyat, ami karakterkincot vagy mot vir: php_flag short_open_tag on php_value include_path *.:/homecorrdey™ Ha nem hasznaljuk az Apache-t, akkor sincs veszve semmi, a PHP 4.0.5 ugya zetie az ini_set () fiiggvényt, amellyel programkédbél adhatunk meg a php. mira néhany bedllitést. A figevény két karakterlincot kér = az utasi z litancls értéket: ini_set("include_path", *.:/homecorrdev™ ); A fiiggvényekrdl a 6, leckében részletesebben is tanulunk. Segitség! A segitség mindig kéznél van az, Interneten, kdlondsen a nyilt fornisk6dd. programokkal kapesolatos problémak esetén, Ezért mielstt a levelezGprogrammunk .KUkIés" gombjét megnyomnank, gondolkozzunk el egy kiesit. Akdrmennyire épielennek tin- het a telepitett értelmez6nk, beallitasunk vagy programozisi megokkisunk, j6 esélyiink van ii, hogy nem vagyunk ezzel egyediil. Valaki talin mir megvilaszolta Ha falba atkdzink, az els6 hely, ahol segitséget kereshetiink, a ja, a http://www. php.net /, kuléndsen az om talilhars, olvasdi tott kézikényv a http: //www.php-net /manual/ cimen. A magyar PHP fejleszidk aweblabor. hu honlapon talilhatnak rengeteg informaciét. Ennek cime ‘http: //weblabor .hu/php/. Itt készitik a magyar PHP dokumentici Ha nem sikerilt megtaldlni a megoldast, hasznos segitség lehet, hogy a PHP hivatalos webhelyén keresést is végezhetiink. A tandcs, ami utén kutatunk, takin egy sajtokOzle- ményben vagy egy FAQ-fajlban rejtézik. Egy miisik kittiné forris a PHP Builder webhelye: http://www .phpbuilder.com. Keresés itt is végezhetd. 22 | eedaz + Algpoe Mcy mindig sikentelenck probilkozésaink? A PHP levelezdlistik keresheté archivumaira niutaté hivarkowdsok megtallhatoak a http://www. php .net/search .php oldalon, sz4- mos mis hivatkozissal egyitt. Ezek az archivumok Ordisi mennyiségd informaciéx tai kéréissey legiobbjaitél, Eholthetink némi id pir kulessz6 kiprobildsdval. yiben ezek utin is meg vagyunk gy6z6dve arrl, hogy problémank még nem me- fel korabban, j6 szolgilatot tehetdnk a PHP kézdsségnek, ba felhivjuk 1 a figyelmet maznale a val6 jelentkezéshez. az archivumokat felsorolé oldalon net /mailing-Liste.php-talilunk hivatkozisokat. A listik k, de ezt ellenstilyozza, hogy rendkivl sokat lehet belélak t- P programozas irdnt, legalibb egy kotegelt kézbesitesd yest) listira iratkozzunk fel. A kétegeltség azt jelenti, hogy a listéra érkex6 leveleket gyenként, hanem naponta egy-két levélben &sszefiizve kapjuk meg, Ha sikeril érdeklédlési kéninknek megfelelé levelezGlistit a szdimos lehetSseg kéi- svelez6listik ol- nak archi- runt, Ha & mcg wil, bekoldhetjik oda a problémankat, A PHP honlapjin nemzetkiz! mutité hivatkozisokat is talélunk, A magyar PHP levelez6lista & httpt//webLabor .hu/wl-phplista/ cimen érhet6 el. Micl6tt clktldenénk egy kérdést, gyGjisk Ossze a probléma szempontfib6l fontos in- formiciékat, de ne irjunk til sokat! A kévetkezé elemek gyakran szikségesek: A hasenilt opericiés rendszer, (6 vagy futé PHP-valtozat szama. conf igure-kapcsolok, - Vagy make-kimenet, ami el6rejelezhette a telepit veniien telies résalet a kédb6l, ami a gondot okozza. kell lyen sok szempontot figyelembe venntink, miel6u egy levelerdlistira pos- Uiznink kérdésinket? Elészér is a fejlesztési problémak megollésdban szerzett tapasz vyés lehet a késGbbi munka sondn. Egy tapasztalt programoz6 4ltaléban gyor- ésosan tud problémakat megoldani, Egy alapvet6 kérdés feltevése technikai tobbnyire egy-két olyan valaszt eredményez, amelyben felhivjak figyel- milnket, hogy erre a kérdéste az archivumban megtalalhat a vilasz. Misodszor, egy levelezdlista nem hasonlithaté Ossze egy kereskedelmi termék timoga ‘isi kOzpontidval. Senki sem kap fizetést, hogy megvalaszolja kérdéscinkel, Ennek elle nére lenyiigiz6 szellemi erGforrdshoz nybjt elérést, beleértve magénak a PHP-nek né Hany fejlesadjét is. A kérdések a valasszal egyitt az archivumba keriilnek, hogy ké- sob mis programorx6k segitstgére lehessenck. Ezért felesleges olyan kérdések fel vése, lyek mar tobbsz6r szerepeltek a listin, Ezek megfontolisa utin ne vonakodjunk kérdéseket kildeni a levelezSlistikra. A PHD Fejleszidk cwilizal, segitdkése emberek és a probléma felvetésével esetleg misaknak is segithetOnk egy hasonlé kérdés megoldasiban, 2. bra + A PHP tolepitése | 23 Osszefoglalés A PHP nyilt forriskédd szoftver. Nyilt abban az értelemben is, hogy nem szkséges egy meghatirozon kiszolgalét, opericiés rendszert vagy adatlxizist haszndlnunk a fejlesztéshez. Ebben a leckében littuk, honnan szerezhet6 be a PHP és mas — a webhelyek szol tisaiban segité - nyilt forniskédi programok. Megnéztik, hogyan ford Apache modulként Linux rendszeren. Ha nem a forriskédot tlijdk le a b nem egy leforditot valtozatot, akkor a csomagban részletes informéciGkat t lepitéssel kapesolatban. Attekintetk a configure néhiny kapesoldjat, melyckkel dolgozé képességeit befolydsolhatjuk. Tanultunk a php.ini fajlrdl és néliiny beallitasi Iehetdségrol, amit megadhatunk bene. Végdl megné2tik, hol taldlhatunk segitséget, ha gondjaink akadnak. Ezzel készen dllunk arra, hogy megbirkézzunk a PHP nyelvvel, A kévetkezi leckében megirjuk els6 programunl leges nyelvi elemek, amelyek sepitségével a PH Kérdezz-felelek A telepitést Apache webkiszolgdlot haszudlé Linux operdcids rendszere title végig. Ez a2t jelenti, hogy a kdinyy mem megfcleld més rendszer ragy kis gdlprogram haszndlata esetén? Nem. A PHP egyik nagy erdssége, hogy tbb rendszeren is képes funi Ha problémak adédnak az adott rendszeren telepitésével, olvassuik el a csomagban talilhaté dokumenticiét és a zikinyy megfeleld fejezeret Alaldban dtfogé, lépésral lépésre: okat kapunk a telepitéshez, Ha to- vabbra sem sikeril megoldani a probkémut, a .Segitség!" cimt részben ismene: tett médszerek célravezet6k lehetnek, Ismétlés Ismétlé kérdések 1. Hol érhet6 el a PHP kézikinyy? 2. UNIX rendszeren hogyan kaphatunk béivebb informiciékat a lbesllitd gekr6l (milyen kapesolét kell megadni a configure-nak? 3. Hogy hivfik éltaldban az Apache beallitisait tartalmazé. 4. Milyen sort kell az Apache beallit6fjlhioz acini, hogy a kiszolgil6 fel a .php kiterjesztést? a PHP beallitasait tartalmaz6 fajl neve? a, és megtanuljuk, mik azok a kilOn kécl megktiliinbiztethetd a HTML¢l merje 24 ||. nész * Alapok — Valaszok 1. APHP kézikonyy Jk valamelyikén érhet6 el. ‘A kibontott PHP csomag kényvtiniban a configure segitségével juthatunk rész~ letes informiciGhoz, a --help kapesoléval: configure --help » beillitisai a hetpd.cong fajlban takithatok. sType application/x-httpd-php - php sor biztositja, hogy az Apache Kiterjesztésd fajlokat feldolgozandé PHP programoknak tekinti 5. APHP bedllitisai a php. ini fajlban tabilhar6k. http: //wwe.php.net /manual/ cimen vagy a takorkiszol- Gyakorlatok 1. Telepitstk a PHP-t, Ha sikerdlt, nézzitk dt a PHP beallitofajlt és ellendrizzik a te- lepités helyességet. 3. ORA Elsé PHP oldalunk Ebben a leckében a kévetkezéket tanuljuk meg: © Hogyan hozzunk Ktre, tltsink fel és futtassunk egy PHP programot? © Hogyan vegyitsiink HTML és PHP kédot egy dokumentumon bell? © Hogyan tehetjik a kodunkat olvashatébba megiegyzések | A PHP telepitése és beiilitisa utdn eljéut az ideje, hogy elkezdjiink vele dolgozni. Ebben a leckében elkészitjk az els6 programunkat é elemezaiik a kédot. A lecke vegére ke- pesek leszUnk olyan oldalak készi elyek HTML és PHP kéxlot is tartalmaznak. Elsé programunk Vagiunk a kozepébe! A kezdéshez nyissuk meg kedvenc szivegfijl-szerkeszidnket! A HTML dokumentumokhoz hasonléan a PHP illominyok is formazas nélki szivegfajlok. Ez azt jelenti, hogy birmilyen szévegfajl szerkesztésé mal készithetiink PHP dllomanyokat. Ih a HomeSite, MacOS-on a Simple Text vagy A legnépszenibb HTML-szerkes216k altal: PHP-szerkesztéshiez is, irédott progr ek példiul Windowson a Jegyzettomb vagy BBEdit, vagy UNIX-on a Vi és az Emacs. pan nydjtanak valamilyen kiln Limogatést 26. |. tész * Alapok i elérheté- Keith Edmunds listat késaitett a PHP-barat szorkesztéprogramekrél, 9 @heep: //phpeditors. Linuxbackup.co. UK cimen. «3.1. példaprogramot, é mentsik 3.1.program-php néven Gd a PHP-telepitésrd ir ki informaciékat a bongé wyon hasznos a hibiik keresésénél, mivel fontos adato- fontos, mivel ex jelzi a kiszolgilé szdmdra, hogy a fajl PHP kédot IP kiterjes7: 4 kiszolgilé beallitisainak médositas: vel a el6z6 leck¢ben részletesen foglalkoztunk, A rendszerga idk be a kiszolgaldt, hogy ne alapértelmezett kiter) Kiszolgilé -phtml vagy .phpS kiterjesi . hogy ne az, AGATY pe Utasitas Se -ay fijlipust, Az Ad@Type altalaban az Apache pttpd .cont bei ation/x-httpd-php «php n kézvetlenal a kiszolgiloprogramot futtaté gépen dolgozank, feltehet -tigyfelet kel nilnunk arra, hogy PHP oldalunkat a kiszolgabéra ju Wincdowson tbbek kizot a WS_FTP h Ribrowser Lite, ‘A kilénbé26 opardciés rendszerek hagyoményosan més-més karakterkombinacidk- kal jelik a széwegsorok végét, ezért PHP dokumentumainkat a kiszolgélat futtaté rendszemek megfeleld sortorésekkel kell menteniink, Ha a sortorések nem megfele \dk, a PHP-feldolgaz6 motor a dakumentumot egyetlen hosszi sorként értalmezheti. Ez dltaléban nem okoz gondat, de iddinként hibak I6phetnek fel. A legtdbb jd szaveg- fajl-szerkesztd lehet6vé teszi a célrendszer meghatdrozasat. ikeralt elhelyezniink a dokumentumot a kiszolgikin, elérhetik egy webbange ‘gével. Ha minden rendben ment, az ablakban a program kimenetét Lithatjuk. Abra a 3.1.program.php kimenetét mutatja 4. 6ra + Els6 PHP oldalunk | 27 3.1. dbra Siker a 3.1. példaprogrant ki ete. 1 PHP-t nem sikeriilt telepiteni hasznaltuk, feltehetéen nem az elézé Abra weiet kapjuk. Ebben az eset- ben dltalaban a PHP program forriskédjat ldtjuk viszont ~ vagy a prc lezi, hogy letdltse-e a fajlt! A rossz be’ sa az adott rendszentél, kiszolgiléedl és bin é<76t6l filgg. A 3.2. a trténik az Internet Explorerben, ha a PHP-t Linux rendszeren modulként futtaté Apache nem ismer fel egy kiterjesztes a megfeleld kiterjesztést um megke téaténik, amit a a program forraskédyat Litiuk a bongész6 ablakiban, elész5r ellendrizzak a mentett fajl kiterjeszésé1. Ha példiul HTML fajlokkal szoktunk delgozni, nézzik meg, hogy a programkédot nem memeutik-e véletlentil -html kiterjesztéssel. Ha a kiterjesztéssel nines probléma, ellenérizntink kell, hogy a PHP sikeresen felkerdlt-e a rendszerre és hogy a kiszolgakit beallitottuk-e a megtele- merésére. Ezekkel 3 sekkel az el626 leckében foglalkoztunk letesen. A 3.2. dbrin lithaté kimenetet agy allitoutuk €l6, hoy olitotuk az AddtType utasitast az Apache beallitfijljabél. 16 kiterjesztés fe 28 | |. 1és2 * Alapok SSeerae Sareea emer toate Farane org te See Fem thee ak inthe ser hr sve comer? Coe) Cie Coes) Lene J ame tb car ea nem azonestthat, A hasznéit kiszolgalét6l és rendszertél fliggden més-miés bedllitési problémisk adéd tien, ped ale ala eee acy t £ féjib6l, amikor a PHP-t CGI-bént futattjuk. tasitast az Apache Harem vi vod pascal nézzisk meg a kiszolgélé telepitési utmutats- cimen részietes (tmutatdst taldl- Miutin sikerdlt feltélteni és kiprobilni els programunkat, részletesebben kielemezhet jak az imém begépelt kédot PHP blokkok kezdése és befejezése Amikor PHP oldalakat irunk, a PHP kédblokkok cleyét és végét jelz6 kokinleges nyitt €s zir6kGdokkal tudainunk kell a feldolgoz6val, mely részeket hajtsa végre. Ha nem adjuk meg, hogy a f4jl mely részei tartalmaznak PHP kédot, az ért mez mindent HTML-nek tekint és valtoztatas nélkGl tovabbkildi a bongészé szimara ‘3.6ra + isd PHP oldalunk | 29 A 3.1 tiblizat a PHP kéd blokkjainak kijel0lésére szolgilé.clemeket sorolja fel: Einevezés Nytoelam Ziréolom - Script elem ‘ - A3.1, Uiblizathan Lithate lehetdstgek kizill csak a7 els6 és az utolsé all minden bealli tis esetén rendelkezésre. A révid és ASP stilustt elemeket engedélyezni kell a ph fajiban. Az eldzd leckében tirgyaltuk a bedllitas mOdszerét A 1Ovid nyitéelemek felismerését a short_open_tag beillitissal engedélyezhetyuk, ha On” dillapotba tesszike short_open_tag = Onz ént nem kell szerkesztenuink Oket A tovid nyitéelemek alapbeallitisban engedélyezetck, a php.ini fiji, hacsak valaki eldadleg ki nem kapeso Az ASP stilusd clemek engedélyezéséhez az asp_tags beillitast kell bekapesoln: asp_tags = On? Aphp. ini fajl médositisa utin lehetéségank van valasztani a bekapesolt tipusok ko Zi. Mivel a hagyomdnyos, hivatalosan timogatott <2php °> forma n komyezet ben rendelkezésre dll, és az XMLlel is milkdik, célszerd csak ext alkalmazni. Az is le hetséges, hogy a révid forma nem sokiig lesz timogaton ang A <> karakterpér arrél téjékoztatja az XML teldolgozat, hagy feldolgozas! utasitas kovetkezik: Ez forma itkBzik a PHP nyité- és zaréolemeinck révid formdjdval, ezért ho XML ‘vagy XHTML dokumentumban hasandluk, a révid PHP elemek megzavarhatjak az XML-drvéinyesitét, a PHP motort, vagy mindkettét. Ha XML kormyezetben kivanunk PHP kédat alkalmazni,tltsuk lea rGvid elemokat. Acrévid, illetve ASP stilusd elemeket akkor is keriindink kell, ha a kédot hordos szeretnénk tenni, ugyanis elGfordulhat, hogy egyes kiszolgal6k nem timogatjik e 30 | Lrész * Alapok Az eld26 példaprogram kib6vitéseként nézzitlt meg, hogyan fest egy PHP fail, amely a fent emlitett formakat haszndlja. Ha engedélyeztik, barmely négy nyité- és Zirbele- met hasznalhatjuk a programban: phpinfo(): phpinfo (): Ha PHP-ben egysoros kodot irunk, nem kell kiln sorba tenntink a nyit6- & ziroelemeket, illetve a programsor: Most, hogy lituk, hogy a PHP mdkédik, Képjank tovabb, és ijunk még kodot. A print() fiiggvény 3.1, példaprogramban a phpinfo() fiiggvényt haszndltuk, A 3,2, példaprogramban Ggy madositjuk a programunkat, hogy valami mast irion kia bOngész6ben. 2 heads 3.3. példapregram - PHP program HTML tar : </head> : <body> 2 <divocb> : <?php : print *Hellé vilég!*: 2 </be</div> 2 </body> </html> 32. |. rész * Alapok Ahogy miné| tobbtajta tj eszkizzel érik el a Vilaghalst, ahol killnféle rendszereken futé Gjabb és jabb béngészéket haszndlnak, a szabvanyok egyre fontosabbak lesz- nek. Ahol csak lehetséges, a kinyv példakédjainak kimenete igazodik az Extensible Hypertext Markup Language (KHTML) szabvényokhoe. Az XHTML a HTML XML ale- pi valtozata, amoly feldolgazhaté és érvényesithet6, exért a kis memériil aszkbz3- kon futé kénnylisilya bongészok szamara hozaférhetébb, emeliett az XHTML a ku- lonféle bangész5k kézatt hordazhato jeldlések haszndlatat is segiti, Az XHTML-rdl tobbet olvashatunk a netp: //wew.w3 .org/TR/xhtmli/ cimen. Eszrevehetiik, hogy @ 3.3. példaprogram egy bonyolultnak tiné elemme! kezdécik. Ez dokumentumtipus-meghatdrozésként (pocTPy=-deklardcié) ismeretes, és azt adja meg, hogy a dokumentum melyik XHTML-valtozatnak felel meg. Lithat6, hogy HTML kéd be gépelésébsl all. A ¢ a PHP oldalakba egyszenien a HTML ta 6 figyelmen kiviil hagy programot megnézziik bon; szdveget latjuk vastag betdkkel, mint 3.3. abrin meg mentum forrisat is megnézaik, ahogy a 3 dokumentumnak tinik, Che Eat Wow Go eckmaks Toes Widow He BS DB [g tosstecormneconsonannscetsing 200 |) (ll 3.3. bra A 33. peldaprogram kimencte egy bingészGben. <IDGCTYPE howd PUBUC ‘WVRCOTD XHTIE 1.0 SeicuiBN ‘Nebathnwend ep A sho OTD nt dt -shet> <hawd> «tile 3.3 pldapngram ~ PHP prograrn HTML tvtaloanal< te > <head> <body> <G><b> <?rhp prin "Hak vg 1 </> </i> <Aedy> <A> 3.4. dbra 43.3. példaprogram kimenete HTML forraskont Egy dokumentumban a Bar tabb kodblokkot helyezk alkotnak egy programot a késdbbi blokkokban is Megjegyzések a PHP kédokban ‘Xz iraskor atlithatonak nak teinhet zonban megiegyzéseket fiiziink ekben sok idét takarithatunk meg maguaknak é koddal fognak dolgozni IL clemek kOzé tetsz¢ fink el egyetlen d A megjegyzés a kodban talill kiviil hagy. Segitségével of tink hozza. 16 olyan szdvege hatébba teherjak APHP egysoros megie kezdddhetnek. Az ezen jelzések gyelmen kiviil hagyja, a sor vagy PHI megjegyzés is megjeayzés 8 programkod hat hénappal késGbby oi két perellel (/ 9 vagy ex) n talathaté s7dveget a PI blokk végéig, Ime 3. 6ra * Els6 PHP oldalunk | 33 Sleges szdimti PHP kodblokk irhato. on beliil, ezek egytitiesen pean elechetck, meénytelentil kus ikGzben ifjuk, a kesobbi ramozOknak, akik az alow kédhoz, nds pr nit HIP-Felclolgs programot és jegyze 6 figyelmen et fizhe- kettGsken 2 karakterrcl G0) mez mini fi ¢ pelea: 34 Lrész * Alapok A tbbsoros megjegyzések egy perjelet kovet6 csillag karakterrel kezdddnek (/*) és egy csillagot kévet6 perjellel (+ /) fejezddnek be sére egyro tab kényvtdrat és parancsfajlt kindl. Csomagiainak egyike a phpDocu- mentor, amellyel a kédon belili megiegyzéseket hipersziveges dokumentaciov’ alakithatjuk, ami a nagyabb programoknél rendkivil hasznes lehet. A PHPDocumen- torrél tabbet is megtudhatunk a http: //phpdocu. sourceforge.net cimen, do mi is foglalkozunk még vele (és a PEAR-rel), a 23. leckében, g ‘APHP Extension and Application Repository (PEAR) a PHP képességeinek bovité- Osszefoglalds ra rendelkezéstinkre allnak azok az eszk6z0k, amelyekkel képesek vagyunk send PHP program fut a egy megfelelen beillitott kiszolgalon, Eben a leckében elkészitettik els6 PHP progeamunkat. Littuk, hogyan hasznalhat6 egy szOvegfajl-szerkeszt6, hogy létrehozzunk és mentsiink egy PHP dokumentumot. Elemeztik a négyféle blokknyité és -ziré elemet. Megtanultuk, miként kell hasznal- nunk a szimara kimenetet kiildjtink, majd dssze- illitottunk egy HTML és PHP kédot is tartalmazé allomanyt. Végil tanultunk a meg- jegyzésekr6l és arrél, hogyan épithetjik be ezeket a PHP dokumentumokba. A kovetkez6 leckében a tanultakat ilva a PHP nyelv épitéelemeivel, kztiik: a viltoz6kkal, az adattipusokkal és a mivel. jelekkel ismerkedtink meg. Kérdezz-felelek Melyik a tegjobb nyit6- és zaréelem? 2 nagyrészt sajét dontéstinkOn millik. A hordozhatésig szem el6u tartésival hagyominyos <?php ?> megoldis a legbiztonsigosabb déntés, A rovid nyit6- -k alapesetben engedélyezettek és rendelkeznek a tOmorség elGnyos tulaj- donsigival, de a hordozhat6sag érdekében inkabb keriilenddk. eh ‘3. 6ra_* EisS PHP oldalunk | 35 Milyen szerkesztéprogramokat kell elkertilni a PHP kédok készitésekor? Ne haszndljunk olyan szGvegszerkeszi6ket, mint a Microsoft Word vagy az OpenOffice, amelyek sajat formdtummal rendelkeznek. Ha ilyen tipusdi szer- kesztdvel mentjik szoveges faijlként az elkészilt dokumentumot, a kédban meg- bojé rejtett karakterek biztos gondot fognak okazni. Mikor kell megiegyzéseker fitznt a kbdokhoz? Ez is. programoz6 déntésén milik. A révid programokhoz nem érdemes magya- rizatot fiizni, mivel ezek még hosszit id6 utin is énhet6ek maradnak. Ha a prog- ram azonban akir csak egy kicsit is bonyolult, mir javasolt megiegyzésekkel bs- viteni, Ez hossz tivon idét takarit meg szimunkra és kiméli az idegeinket. Ismétlés Ismétlé kérdések A felhasznalé bongés2dxével elolvashatja-e a PHP kéxdot? Adjuk meg a PHP hagyonvinyos nyité- és ziréelemeit! Adjuk meg az ASP stilusd nyit6- és zérdclemeket! Adjuk meg a Script nyit6- és zardelemeket! . Melyik filgavény haszndlatos a bngész6 sziméra kildétt adatok kifrisihoz? weepe Vélaszok 1, Nem, a felhaszndlé csak a kGd kimenetét lithatja, 2. <?php /# ide keral a kéd ?> <t 14 ide keral a kéd » <script language="php*> 1 ide keral a kéd </script> 5. A bongészOben valé kiirishoz dltalaban a print () haszndlatos, bar azonos. eredménnyel hasznalhatnak az echo ()-tis. 36 | L.rész * Alapok Gyakorlatok 1. Gyakoroljuk a PHP progeamok elkészitését, feltdltését és futtatisatt Készitsiik el [6 vilig" programunkat, adjunk hozzé HTML kédot, és tovabbi PHP sajat blokkokat! Kisérletezziink a kilénféle nyité- és ziréelemtipusokkal! Hatérozzuk meg, melyik engedélyezett az adott rendszeren! Nézzk meg a php. ini fajlban, 's ne felejtstink el megjegyzéseket sem fiizni a kédhoz! 1 gondoltuk- ho, A PHP nyelv Az alkotdelemek Ebben a leckében a kovetkezOket tanuljuk meg: itozék és hogyan haszndljuk azokat? valtoz6kat és hogyan érhetjiik el azokat? ok az adattipusok? a leggyakrabban hasznalt miveletek? © Hogyan hozhatunk létre kifejezéseket maveleti jelek haszndlatival? © Hogyan hatirozhatunk meg allandékat és hogyan haszndlhatjuk azokat? Most mar mélyebben elmertiltink a nyelv rejtelmeiben. Azalapokkal kezdiink, igy a kezd6 programoz6nak rengeteg 6 informiciét kel dolgoznia, Aggodalomra azonban semmi ok, barmikor vissza lehet lapozni a kényvben A lényeg, hogy a fejezetben leintak megértésére tGrekediink, ne csupan a memorizal A gyakorlott programoz6knak is ajinlatos legalabbis dtlapozniuk mert olyan dolgokat tirgyalunk, amelyek kifejezetten a PHP-re vons 40_ Il. rész * A PHP nyelv Valtoz6k A valtozdk Kilénl ziink el benniik. konkrétan be kelle eredményt patjuk példaul a kovetkez6t: kien Qed); program” azonban csak azoknak hasanos, akik azt szeretnék tudni, mennyi 2 ichatunk egy tjabb utasitist, ami a 3 és az 5 Gsszegét irja ki, ha erre van seikséy, megkézelités a programozisban nyilvinvaléan képtelenség, A viltozokkal viszont miveletsablonokat készithetiink (példaul két szim dsszeadasa- n kell amiatt aggédnunk, hogy milyen éntékek vannak a valtoz6kban, mert felhasznalé adja meg a program futisakor, vagy egy adatbazisb6l olvassuk ki mészetesen meg 4. vzokat di Valoz6t akkor célszert haszndlni, haa programunkban szerepl36 valamelyik mivelet nuis-mis adatokkal dolgozik, akar a program egyetlen végrehajuiséin bell. dollirelbsl (5) és egy .tetsz6legesen” vilasztott névbél tevGdnek dssze. szimokat és alahiizis karaktereket (_) taralmazhat (szimmal azonban nem kezdGdhet), szdkoziket é mis olyan karaktereket, amelyek nem szdimok vagy beuik, nem, ime néhiny érvényes valtozné \eazeztenezenze; Ne feledjilk, hogy a pontosvess26 (;).a PHP utasitis végetjelzi, igy az elGzdekben a pontosvess26 nem része a viltoz6k nevének. A vitoztk adauipusokat ~ s24mokat, karaktedéncokat, objektumokat, tmbdket vagy logikai énékeket - varolnak, tartalmuk barmikor médosithaté, Amint litjuk, rengeteg féle nevet adhatunk viltozéinknak. Valtoz6 létrehozasahoz (deklarilésihoz, vagyis bevezetéséhez) egyszerden esak bele kell {mi azt-a progra- munkba, Létrehoziskor altaléban rogtén értéket is szoktunk adni a valtoz6nak: Sszaml = 8; Sszam2 = 23; 4, Gra» Aralkotéolomek | 41 Iu ket waltoz6t hoztunk létre és az énékad6 (hozzirendeld) miveleti jellel (=) énéket is adtunk nekik, Az értékadisrél bovebben a Meiuelen jelok és kifejezéseke-cinnil réseben tanulunk, a lecke kés6bbi részében. Miutin énéket adtunk wiltozéinknak, gy kezel- hetjik azokat, mintha maguk lennének az értékek, Vagyis a fenti példanél maradva a létrehozas unan ir print Sszaml: hatiisa megegyezik a print 8: hatasival, feltéve, hogy a §szaml viltozé énéke 8 maradi. Adattipusok A kilonféle tipust adatok tabb-kevesebb helyet foglalnak a memoridban, a nyelv pe dig mindegyiket némileg mas médon kezeli, Nehany programozasi nyelv megkOveteli, hogy « programoz6 eldre meghatirozza 4 wiltoz6 ipusit. A PHP ezzel szemben gyen- gén tipuses nyelv, ami azt j adathoz rendek kiegészit cid lenne. A PE IP vegyes rviel6l e7 am jelenti, hogy a viltozdk rugalmasan haszndlhatok: egyszer karakter| misszor esetleg szim lehet benniik. Misfeldl, nagyobb méretii programokban zavar chet, ha egy adott tipust wiltozét virunk egy valtozdban, mikézben valami tel- jesen mas van benne. Ha kédunkat példaul dgy inuk meg, hogy tomb tipust valor val mokodjon, de az szimértéket tartalmaz, hiba léphet fel, mik6zben a program tomb: miveleiet proba végezni a valoz6n, fort hat adattipust mutatia, Tipus —Példa Leis Integer 5 Egész szim Double 3,254 LebegGpontos szim String "helle= Karakterek sorozata, karakterlane Boolean true Logika vahov6. Enéke igaz vagy hamis (crue vagy false) lehet Object ‘Objektum, isd a kilencedik, objekiumokkal foglalkoz6 lecket Array ‘Tomb, lisd a hetedik, tombokkel foglalkoz6 lect L A PHP hat adattipusa k6zal a tmbket és az objektumokat késdbbre hagyjuk 42 | ll. rész « A PHP nyelv Anyelv azonban emellett két kildnleges adattipust is biztosit; ezeket a 4.2. tablizatba tuk. Loirds Hivatkozis kuls6 er6forrasra (peldaul adatbazisra) Kezdéenék nélkiili valtoz A kiils6 alkalmazasokkal vagy fijlokkal dolgoz6 fliggvények gyakran adnak vissza eré- dlatokat; ere a kényy késObbi részeiben példakat is Kithatunk. oz6k szimvra van fenntartva, amelyek még nem kaptak énéket, fornis (resource) tipu A NULL tipus azon A viltoz6 tipusinak meghatarozisira a PHP beépitett gettype () figgvényét haszndl- hatjuk. Ha a figgvényhivis zérdjelei kozé valtoz6t tesztink, a get type () egy karakter- Linceal tér vissza, amely a valtoz6 tipusit adja meg. A 4.1. példaprogram egy viltoz6- hoz ot kulénbéz6 tipusé énéket rendel, majd meghivja a gettype () figgvényt A fliggvényekrél bévebben a hatedik leckében tanulunk. PUBLIC +0 Strict //EN* -org/TR/xhtm11/DTD/xhtml1-strict .dtd* : 24.4. példaprogram - Vd4ltezé tipusdnak vizsgdlata
"; : $proba = 5; 1S: print gettype( Sproba ); // integer 6: print "cbr />" 17: Sproba = "6t*; 18: print gettype( $proba }; // string 19: print "
"; 20: $proba = 5.0; 21: print gettype( Sproba )}; // double : print ‘
"; Sproba = true, print gettype( Sproba ); // boolean print "
"; Amikor a 11. sorban bevezetjik a $proba viltoz6t, nem rendeltink hozzi énéket, eért a 12. sorban, a gettype() fllggvénnyel val6 elsé vizsgilatndl a NULL karakterlincot kapjuk. Ezutin azonban az egyenléségjel segitségével étékeket adunk a viltozénak, mieltt a gettype ()-nak dtadndnk. Az 5, amelyet a 14, sorban rendeliink a $proba viltoz6hoz, egész szim (integer), va- gyis olyan szim, amelyben nines tizedesjegy (.tizedespont”). (KOnyviink ugyan magyar ayelvd, a PHP azonban az angol kifejezéseket hasznilja. A gettype ezért adja meg az integer, string, double és boolean szavakat. Ugyanigy az angol irismdd szerint a szdm epészrészét a WrtrésH161 nem tizedesvessz6, hanem tizedespont valasztja el, An- nak érdekében, hogy ne kGvessiink el gépelési hibsikat, a kOnyv hatralev6 részében a magyanul kiesit szokatlanul cseng6 fizedespont kifejezést hasznaljuk.) A 17, sorban egy karakterléncot (+ ot +) rendeliink a valtozGhoz; a string karakterek sorozata, Ha programunkban karakterlincokkal dolgozunk, mindig valamilyen —egyes (') vagy kett6s (+) - idéz6jelbe kell azokat tenniink. Az 5.0 a 20. sor értékadiisiban double. vagyis lebeg6pontos szim: olyan szim, amely tartalmazhat tizedespontot. A 23. sorban a viltozénak adott true logikai €riék (boolean); az ilyen tipusok a két logikai ének, a true (igaz) és a false (hamis) egyikét vehetik fel. faz egyes és kettés idézijolok kézdtt kildnbség van, ha karakterléncokkal haszél- juk azokat. A kattés idézdjelek megengedik a valtozék feldolgozését, tehat az ilyen idézdjelek k6z6 helyezatt valtozdk helyére a PHP-teldolgoz5 behalyettesiti a vaitozs értékét. Lassunk egy példat: $nev = “*Jdnos"; print "*Hellé, $nev"; // Hellé, Jénos He ugyanedt a karakterléneot egyes idéaéjelek (aposztr6fok) kazé tesszik, nem tar. ‘6nik behelyettesités: print ‘Hellé, g$nev'; // Hellé, Jénos 444| IL rész + A PHP nyely ‘A kettés idézéjelek kaz6tt a feldolgoré az tigynevezett védékaraktereket (.escape”, formaz6 aan is értelmezi. Ezek a karaktorek kilOnleges jelentést kapnak, ha egy farditott perjet (\) el6zi meg dket. llyen példdul az Gj sort jeleé \n, @ tabulatort jeleé \t, a kettds idézdjelen bell szerepl6 kett6s idéz6jeles karaktert kiird \~, a ha- sonléan a forditott perjel kiréséra szolgalé \\, illetve a dollérjelet mogjelenité \ 5 {ami ebben az esetben éppen hogy elvesziti kuldnleges jelentését, tehét nem egy valtoz6t jelez) Alapszabélyként tehat jegyezniik meg: ha egy karakterléncot pontosan gy szeret- rnénk kiiratni, ahogy begépeltilk, haszndljunk egyes idéz6jeleket. [gy a kéd gyorsab: bran is fog futni, mert a feldolgozénak nem kell értelmezie a karakterlancot. Ha véddkaraktereket és valtozébebelyettesitést kivanunk alkalmazni, a kettés idézd- jelek melt kell déntentink, A PHP-ben a 4-es vaitozat eldtt nem |étezett a boolean tipus. Ott is haszalhattuk a crue értéket, de az val6jéban dllandé volt (a waltozék killonleges fajtéja, amellye! a fejezetben késébb foglalkozunk), amit az értelmezd egyszerden integer tipust 1-te forditott. és a Resource tipusok is a PHP 4-ben jelentek meg. Tipusinformacié megjelenitése a var_dump() segitségével A ©) kilejezetten egy adot feladatra tervezett eszkéz. Azt testi, amit igér: kerdezi a valtoz6 tipusit, és visszadja, A var_dump() ezzel szemben a valtoz6 mellett annak tartalmdrdl is vijékoztat, s6t az, olyan Osszetett tipusok esetében, mint a tombok és objektumok, a vltoz6n belli Osszes tipusrél is informéciét ad. Ha a 4.1. példaprogram 11. sorat médositjuk, a vizsgalatot a var_dump () segitségével is elv zhetjiik: 4, 6ra + Az alkotbelomek | 45 Egy bizonyos adattipus keresése A gettype () hibakeresés esetén is hasznos, mert minden valtozérél pontosan meg- mondia, milyen tipusit, Gyakran azonban esak arra van sziikség, hogy megnézzk, bem egy viltoz6 egy bizonyos tipust tartalmaz-c. A PHP erre egy killénleges filga- .3. kiblizatban soroltunk fel, egy viltoz6t vagy énéket varnak, és y logikai énéket adnak vissza, bool () Igazat ad vissza, ha az dtadon paraméter logikal éték, zat ad vissza, ha az atadott parameter lebegdponios enék. double () ‘vissza, ha az dtadott paraméter objektam: ring () Igazat ad vissza, ha az atadot paraméter Karakterlinc, ad vissza, ha ax dtadott paraméter null éngkd zat acl vissza, ha az Madott parameter eriorras, Az 5, leckében tanulunk az if utasitisrdl, amellyel megvaltoziathatjuk a program futa sit a vizsgilat eredményét6l fggden. A tipusvizsgald fiigavényeket gyakran hasznAljak az if utasitissal egyiitt, hogy biztositsdk, hogy a megfelel6 tipust viltoz6 adédjon At egy adott figgvénynek vagy objektum tagflggvényénck ‘Tipus médositésa a settype() segitségével A PHP a vailtoxd tipusinak médositisira a set type () figavényt biztositja, A s ‘ot gy kell haszndlnunk, hogy a megvéltoztatandé tipust viltoz6t, valamint a viltozé ty - pusat a zdndjelek kéizé kell tenndink, vesszével elvalasztva. A 4.2. példaprogrimbsa a 3,14-et (lebegSpantos szim, vagyis doub1e) olyan pusokkd alakitjuk, mely tipusokat ebben a fejezetben részletesen tingyalunk. 1 shen a 4.2. példaprogram - Véltoz6 tfpus4nak médositésa settype() faggvény segitségévele/title> ads ja_milyen_tipusu = 3.14; pe( $ki_tudja_milyen_tipusu }; // double -- $ki_tudja_milyen tipusu
"; // 3.14 ( $ki_tudja_milyen_tipusu, string }; gettype( Ski_tudja_milyen_tipusu }; // string * -- Ski_tudja_milyen_tipusucbr /o"; // 3.14 e( Ski_tudja_milyen_tipusu, int )s gettype( $ki_cudja_milyen_tipusu ); // integer . Ski_tudja_milyen_tipusuebr />*; // 3 ype( Ski_tudja_milyen_tipusu, double }; yettype( $ki_tudja milyen_tipusu }; // double " -- ski_tudjamilyen_tipusucbr />"; // 3.0 Ski_tudja_milyen_tipusu, bool }; type( Ski_tudja_milyen_tipusu }; // boolean A ipusmédosits utén minden esetben a gettype () fdggvényt haszndljuk, hogy mez: BySz6d)0nk arrél, hogy a tipus médositasa sikerdlt, majd kiirjuk a $ki_tudja_mi- tipusu nevi valtozé étékét a bingészGbe. Amikor a *3,14* karakterlancot 7. sorban egésszé alakitjuk, a tzedespont uténi informacié elvész. Ezén torténhet meg, hogy a $ki_tudja_milyen_tipusu viltoz6nak még akkor is 3 az értéke, amikor @ 20. sorban Gjb6l lebegpontos szimma alakitjuk. A végén (a 23. sorban) a valtoz6t logikai tipusiva alakitjuk, Az ilyen dtalakitisokndl a 0-461 kilénboz6 szamok énéke mindig true lesz. Amikor a PHP-ben kifrunk egy logikai valtoz6t, akkor ha a viltozé énéke true, a kimeneten 1-¢t litunk, mig a false értékd valtozok semmilyen kimene- tet nem eredményeznek. igy mar énthet6, hogy a 21. sorban lev6 utols6 kijratas mien eredményezett 1-¢t, 4. 6ra + Az alkotéelemek | 47 médositésa tipusétalakitassal neve elé zirdjelbe ir adattipus segitségével a valtoz6 éntékének dltalunk tipustiva alakitott masolatat kapjuk. kilénbség a settype() figgvény és a tipusdtalakitas kozott, hogy az Atala sorin méisolatot kapunk, tehdt az eredeti valtoz6 tipusa és értéke valtozatlan ma- A 4.3, példaprogram ezt hivatott illusztrilni. DOCTYPE heml PUBLIC V/W3C/DTD XHTML 1.0 Strict//EN" shttp: //www.w3.org/TR/xhtml1/DTD/xhtml1-strict .ded* s
°; ff 3.14 $tarolo = ( string ) $ki_tudja_milyen_cipusu; print gettype( Starolo ); // string print * - $tarolocbr />"; // 3.14 Starolo = ( integer ) $ki_tudja_milyen_tip print gettype( $tarolo ); // integer print * -- $tarolocbr /> did $tarolo = ( double ) $ki_tudja_milyen_tipu: print gettype( $tarolo }; // double print * - Starolocbr />*; // 3.14 Starolo = ( boolean ) $ki_tudja_milyen_tipusu; print gettype( Starole ); // boolean print * - Starolocbr />"; 9 // 1 [>
66 | hed 6 A PHP pat (A cki_tudja_milyen_tipusu véltoz6 Upusdt valéjiban a program egyik pontjin sem valtoz +4, az végig lebegpontos szim marad. Errdl a 25. sorban meg is gy626- dink a ) figgvénnyel, abol kiirjuk a valtoz6 tipusat. Csupan misolatokat hozunk létre, amelyek az ditalunk meghatirozon tipustva alakul- nak é az Gj érték keril aztin a Starolo nevd wiltozbba, elGszbr a 12., majd a 15., 18., 21, és 24, sorban, Mivel a $ei_tudja_milyen_tipusu medsolatdval dolgozink, a 4.2. példaprogram 17. és 23, sorival ellentétben az eredeti valtoz6ban semmilyen informi- cidt nem veszitiink el Most, hogy muir meg tudjuk viltoztatni egy valtoz6 tipusit a settype() fggvénnyel vagy tipusitalakitissal, el kell gondolkodunk azon, miért is hasznos ez. Nyilvin nem van s26, amit gyakrun fogunk haszndlni, hiszen a PHP automatikcusan dtala- kitta a past, ha a kOmyezet ezt megkivénja, Ez az autornatikus atalakitis azonban id iglenes, nekunk viszont maradand6 dtalakitisra lehet szakségink. A HTML Grlapokon a felhasznalé dial begépelt szimokat a programunk karakterlinc kent kapja meg. Ha két, szdmokat tartalmaz6: karakterlincot probilunk Osszeadni 4 PHP seit, és szdmmd alakitja azokat az Osszeadas kOrben. Lassuk az alabbi példit A fenti kéd a 70 epész szdmot eredményezi; a karakterlincok dtalakitisénal a PHP f) gyelmen kivul hagyja a nem sziménékd karaktereket. A felhaszndl6i bemenetet azon. han lebet, hogy mi magunk szeretnénk tisztiba tenni. TegyOk fel, hogy a felhasznalcx ozamm beirasdra ketOk. Tevékenységét uténozhatjuk, ha beveretiink egy vallozé4, > ¢1r- téket adunk neki: ba = *30em*s Amint lathaté, a felhasznal6” elkovette azt a hibit, hogy a ménékegységet is megadia aszamon kivil. A bemenet azonban egész szammd alakithaté, igy kiksz6bOlbetjak a problémat: Sproba » (integer) $proba; print ‘A képzeletbeli doboz gteat centiméter szélességd.*; A tipus dtalakitdsdnak egyéb médszerei Ax adattipusok dtalakitésdra eddig két médszen liuunk: a tipusditalakitast, illetve a settype() fOgavény haszndlauit. Exeken kivil a PHP az egésszé, lebeg6pontos szimmd, illetve karakterlancea alakitisea kiln fggvényeket nytt. Ezek a figave- nyek, amelyeket a 44. tiblézatban soroltunk fel, barmilyen tipust Enéket elfogadnak kivéve (mbOket és objektumokat, és az atalakitost énéket adjak vissza. Fiigavény Leiris: ~aoubleval() __ Ertéket fogad, és annak double meghelelojet adja vissza. intval 0) fogad, és annak int mepfeleldjét adja vissza. strval () Enéket fogad, € annak string megfelelOét adja vissza. 7 Miért vizsgaljuk a tipust? Miént fontos ismerniink egy valtoz6 tipusit? Nos, azén, mert a programozasban szimos olyan helyzet ad6dik, amikor mas forrisbol szitrmaz6 adatokat kapunk. példiul megtanuljuk majd, hogyan hozhatunk léure fagevényeket programja A fiiggvények paraméterek formajaban kaphatnak adatokat, melyekkel akkor képesek dolgozni, ha a megfelelé tipusti adatot kapjak, amit elobb ellenériz nink kell, Egy erGforrist vind figgvény példéul nem biztos, hogy akkor is mOkédik, hha egy karakterlincot adnak at neki, Miiveleti jelek és kifejezések Most mar képesek vagyunk adatokat helyezni valtoz6inkba, meghatarozhatjuk, s6t meg is viltoztathatjuk egy waltoz6 tipusat. Egy programozsi nyely azonban nem wl hasmos, ha a tirolt adatokkal nem végezhetiink miiveleteket. A miiveleti jelek (operito- rok) olyan jelek, amelyek azon maveleteket jelzik, melyek lehetss vagy tobb értékbél tj ériéket hozzunk Ketre. Az értéket, any tényezdnek (milveletértéknek, operandusnak) hivjuk. eszik, hogy egy el amo égezzik, ‘A miveleti jel olyan jel vagy jelsorozat, amelyet ha énékek Osszekapcsolisira haseni- Junk, valamilyen mfiveletet végezhetiink, amely altalaban oj énéket eredményez ‘A tényezé egy érték, amelyet a maveleti jellel kapesolatban hasznilunk, Egy mdveleti jelhez dltaliban két tényez6 tartozik Kapesoljunk éssze két tényez6t és hozzunk Kétre egy tj értéket: 445 Ita 4 ésaz5 atényez6k, Az Ssszead6 miveleti jel (+) végez rajtuk miiveletet & szolgiltatja a 9 értéket. A miveleti jelek tbbsége két tényezG kézint helyezkedik el bir a lecke kés6bbi részében Latni fogunk néhdny kivételt is. 50] rian * A PHP a : ae eti je ttesét kifejezésnek hivjuk. Annak ellenére, hogy See jelek segitségével hozzuk létre, a kifejezésnek hem kell szakségszerdien milvelet jelet tartalmaznia, Val6jaban a PHP nue ami ér- ror meg, Kifejezésnek tekint. Igy az. alland6k, pékidul a 654; a vAltoz6le; mint ve a figavényhivasok, példaul a gettype( } bee fi 405 k é i és egy méveleti jelre egy kifejenés pedig két tovibbi kifejezésre (4 63 5) 6 kifejezés értéket eredményez, gyakran azt mondjék, hogy azadomt éxtékre éreébeltdil (felolddsa az adot énéket eredményezi), vagyis minden alkifejezést figyelem- ay tekintheté, mint maginak az énéknek a k6dja. A tényezOk és mivel 1 legelemibb kifejezéscket is mdvelet nao, i Akifejezés a figgvények, énékek és miveleti jelek olyan egyiinese, amely értéket hata- rox meg ‘ossiighan azt mondhatjuk, hogy ha énékként hasznilhatunk valamit, akkor az kifejezés. Most, h alapelveket tisatdztuk, ideje megismerkedniink a PHP alapvetG Ertékadés Mir talilkoztunk az értékadé (hozadirendel6) milveletijellel, valahinyszor énéket ad- tunk valtozinknak. Az értékad6 mdveleti jel egyetlen karakterb6l dill, az egyenl6séx- jelbél (=). Jelentése: a mdveleti jel jobb oldalan 4llé kifejezés €rnékét hozzarendeljak a bal oldali tényezShéz es Kelemen"; 4 valloz6 ekkor a *Kémdves Kelemen" szveget fogja tartalmazni. Erdekes m6- Gon ez az énékaclis maga is egy kifejezés, Els6 litisra tigy tinik, hogy az énékadis cayszenien megvikoztatja a Snev éniékét, de valdjiban a kifejezés, amely az értékadé veleti jelbél all, mindig a jobb oldalon allé kifejezés étékének mésolatit adja vissza t ( Siev = "Kémives Kelemen" ); bongész0be, hogy *Kémives Kelemen", azon felll, hogy a *Kémd sBveget a nev viltozdhoz rendeli, ; ee i méveletek pontosan azt teszik, amit Felel6 meiveletijeleket sorola fel. Az Osneadl mv eer a ee Bula oS a bal oldalihoz, a kivoné mivelet a jobb oldali tényez6t kivonja a bal oldalibél, az oszté 4. 6ra + Az alkotéolomek | 51 mévelet a bal oldali tényez6t eloszija a job oldalival, a szorz6 mGvelet pedig Osszeszo- rozza a bal és a jobb oldali tényezOket. A maradékképzés vagy maradékos oszt4s (mo- dulus) mdvelete a bal és a jobb tényez6 egész osztisinak maradékat adja. Miveleti jel Név Példa Enék * Osszeadas. 1043 13 = Kivonas 10-3 it i Osztas: 10/3 3. 333333333333 * ‘Szorzas 1043 30 + Maradekkepzes 1083 1 Osszefiizés Az Osszefiizés jele a pont (.). Mindkét tényezét karakterlanenak tekintve, a jobb oldali elemet hozzafiizi a bal oldalihoz. Vagyis a Para" . " Zita™ kifejezés énéke: “para Zita" ‘Az clemek tipusuktol fiiggetlentl karakterlancként értékelédnek ki, és az eredmény is mindig karakterlane lesz, A kényvben gyakran talélkozunk majd az sszefizés mdvele- tével, amikor egy kifejezés eredményét hozzd kell adnunk egy karakterkinchoz. ime egy példa: Scentimeter = 212 print "A seélesség “.($centimeter/100).* méter.*; Osszetett értékadé miiveletek Annak ellenére, hogy valojiban csak egy émékad6 mivelet van, a PHP szémos tovabbi milveletet biztosit, amelyek az eredmény visszaadisa mellett médositjik a bal oldali té- nyezét. A miiveletek a tényez6ket dltaldban nem valtoztatjik meg, ez alél azonban az érekadiis kivétel. Az Ssszetett Ertékadé miiveleti jelek egy hagyomanyos mAveleti jelb6! és az azt kovet egyenliségjelb6l Allnak, Az dsszetett miveleti jelek megkimélnek min- ket attél, hogy két méiveletet kelljen haszndlnunk € az elgépelés esélyét is esikkentik A $x = gx += 4; // $x most 8 példiul epyenénékti a kovetkez6vel: gx = 4; sx 2 $x + 4; // $x most B nyez6nek megfeleléen. Gsszehasonlités Az ésszehasonlité miiveletek a tényezokon sémek vissza, vagyis énékik exue lesz, ha a nem, Ez.a tipust kifejezés az olyan verérlési whi Le utasitisok. Ezekkel az &t@dik Ha meg szetetnénk vizsgalni, hogy a2 jelet hasznalhatjuk: ox < 5 4, 6ra * Azalkotéelemek | 53 Miveleti jel Nev Igaz, ha Példa ($x = 4) Eradmény egyenlo a Ket értek megeayezik 5 false : nem egyenlé a ket érték kalonbazd iS true “azOnOS a ket énék és tipus false megegyezik nagyobb, mint abaloldalnagyobb gx > 4 false a jobb-oldalnal Tagyobb vagy abalokdalnagyobb sx >= 4 crue egyenlé a jobb oldalnal 2 Kise, mint a bal oldal Kiseb oe <4 false a jobb oldalnal Tesebb vagy a bal oldal kisebb. oe ae True e 6 a jobb oldalnal miiveleteket tbbnyire egészekkel vagy lebegpontos szimokkal haszndljuk, Gség karakterlancok esetében is vizsgalhato, APHP 5-ben az === annak ellendrzésére hasanélhat6, hogy két waltoz6ban ugyanez az objektum taldlhaté-e. A PHP 4 masképp valdsitotta meg az === miveletet: sszehasoniitota a két objektum tulajdonsagait, és akkor adott vissza igazat, ha aa két objektum ugyanazon osztaly egy-egy példénya volt, 6s valamennyi tulajdon- sdguk megegyezett, mig a PHP § mar nem taldl azonosnak két kikénbdz6, de azo- nos tipusd és azanos tulajdonsdgokkal rendelkezé objektumat. Az objektumokkal részietesen a 9. és 17. leckében foglalkozunk majd. Bonyolultabb ésszehasonlité kifejezések létrehoz4sa logikai miiveletek segitségével A logikai miveleti jelek logikai énékeken végeznek miiveleteket. A | | vagy az or ka rakterekkel jelzett cqgy miivelet példul true-val tér vissza, ha bal vagy jobb tényezdje true. true I] false A fenti kifejezés eredménye példaul true. A ga vagy az and karakterekkel jelzett és mivelet esak akkor ad true-t, ha mindkét té- nyezBje true. true && false Miiveleti jel Nev kiziré vagy Miért kell kétfGle nagy és és mdveleti jel? A rendjében rejlik, amelyrél a fejezet kés6bbi Egész tipusd valtozk értékének Amikor PHP-ben programozunk, gyakran. pusi vilozd énékét eggyel ndvelniink vag az esetben fordul el6, amikor egy cikl nultuk annak, hogyan tehetjik et let jellel ndvelni a ae Sx = Se 4 1; 4, 6ra + Az alkotéolomak | 55 De hasznalhatunk sszetett ériékado-Gsszead6 milveletet is: $x += 1: // $x értéke eggyel né Az eredmény mindkét esetben a $x-be keriil. Mivel az ilyen tipust kifejezések nagyon gyakoriak, a PHP (a C nyely mintéjéra) kalénleges miiveleteket biztosit, amelyek lehe- rséget adnak arra, hogy egy egész tipustt valtoz6hoz hozziadjunk egyet vagy kivon- junk beldle egyet, majd az eredményt magahoz a vltozGhoz rendeljtik. Ezeket a md- veleteket nevezzik utdtagos novelésnek és esikkentésnek (poszt-inkrementilis és poszt-dekrementalas). Az uttagként hasznalt novelé miiveleti jel a vailtozé neve utin irt két pluszjelb6l all: Sxee; // $x @rtéke eggyel né Ha hasonlé médon két minuszjelet irunk a valtoz6 neve utin, a valtoz6 énéke eggyel ceskken; gx--: // $x értéke eggyel csdkken Ha a ndeld vagy csOkkent6 miveleti jelet feltételes kifejezésen beldl hasznaljuk, fon- tos, hogy a tényez6 éntéke csak a feltétel kiéntékelése utan waltozik meg: gx = 3; Sete <4; /figaz A fenti példdban $x éntéke 3, amikor a 4-gyel hasonlitiuk Ossze, igy a kifejezés értéke igaz, Miutin az Gsszehasonlitis megtortént, sx énéke eggyel nd. izonyos korilmények kbz6tt arra lehet szikség, hogy a viltoz6 éréke a kiértékelés elt cskkenjen vagy n6jén. Ere szolgalnak az elGtagként haszndlt valtozatok (ps inkrementilés és pre-dekrementilas), Onmagukban ezek a mdveletek ugyantgy visel- kednek, mint utétagként alkalmazott valtozataik, csak a két plusz- vagy minuszjelet ek- kor a valtoz6 neve elé kell imunk: ++$x; // $x értéke egayel né --Sx; // $x értéke eggyel cadkken ‘Ha ezek a méveleti jelek egy nagyobb kifejezés részei, a viltoz6 énékének madosit a vizsgilat elit tonénik meg: Sea 3s +e9x <4; // hamis Ebben a kédrészletben $x értéke eggyel n6, miel6tt dsszehasonl ‘Az dsszehasonlitis €rtéke £a1se lesz, mivel a 4 nem kisebb 4-nél. ndnk 4-gyel __56 |.rész'* A PHP nyely A miveletek sorrendje ‘ket Altaliban balrél jobbra olvassa. A tobb milveleti jelet tar zéseknél mar bonyolultabb a helyzet. Elsz6r vegyiink egy Az ételmez6 a kife talmaz6 dsszetetebb ki egyszerti esetet In minden tiszta és értheté, a PHP hozzdadja a 4-et az 5-héz, De mia helyzet a k6vet- kozunk szembe: a kifejezés azt jelenti, hogy .vedd a né- . ssze Sket, mak az eredményt szorozd meg ketiGvel”, vagyis 18 Esctleg azt, hogy .add hozzi a négyhez az St é a kett6 szorzatit”, vagyis az 1? Ha egyszerden balrél jobbra olvasnink, akkor az els6 valiozatot kellene nk A PHP-ben azonban minden mdveleti jelhez tartozik egy .clsGbbségi té- ). Mivel a szorzis el et élvez az dsszeadassal szemben, igy (is- uinkkal Osszhanghan) a méisodik vilasz a helyes megoldis. Természe- ‘sé, hogy kikényszeritsik, hogy eldszbr az ésszeadas hajtédjon vég- fen sorrendben hajtédjanak is unk vagy nem vagyunk iztosak, A 49. wiblizatbé ebben (csdkkend sorrendbe 4. 6ra + Az alkotéelemek | 57 Mint Litjuk, az or kés6bb hajtédik végre, mint a || miivelet, az and-del szemben pedig elsGbbséget élvez a &&, igy a kisebb prioritist logikai miiveleti jeleket haszndlva az ésszetett logikai kifejezések olvasisméd}it médosithatjuk, bar ez nem feltétleniil j6 dtlet. Bir a kovetkez6 két kifejezés egyenértékd, a misodik kifejezés konnyebben olvashaté: gx and $y || $2 sx && ( Sy IT $2) k a mtiveletsorrend az oka annak, hogy a PHP-ben mind a &&, mind az and megta- rdjelek hasendlata tisztabb kédot és kevesebb hibdt eredményez, mintha az elsGbb- ségi sorrendre timaszkodnank. A kényvben ezért végig a gyakrabban alkalmazou | | és && mélveleti jeleket hasznaljuk, Allandék toz6k rugalmas adattirolisi lehetéséget nytijanak szimunkra. Megvéiltoztathatjuk értékiket, 36t tipusukat is, barmely pillanatban. Ha azonban azt szeretnénk, hogy egy adoit név alatt tiralt érték ne viltozzon a program futisa sordn, létrehozhatunk allan- dékat (konstansokat) is. Ezt a PHP beépitet define () filgavénye segitségével tehetjiik meg. Miutan az alland6t létrehoztuk, annak értékét nem szabad (nem tudjuk) megval- toztatni, Az dllandé nevét, mint karakterlancot és az énéket vesszével elvilasziva a 24- réjeleken belilre kell irunk: define( "ALLANDO_NEVE", 42); Az Alland6 értéke természetesen lehet s4m, karakterline vagy logikai tipust is Az a szokas, hogy az dllandok neve csupa nagybetb6l ll. Az dlland6k neve nem tar~ talmaz.dollirjelet, igy az dlland6k elérése csupan a név leirasb6l all. A 44, példaprog- ramban lithatunk egy példat dlland&k elérésére és hasznalatéra, 1 chead> : etitles4.4. példaprogram - €llandé létrehozdsa : :
+ shead> tle»5.1. példaprogram - Az if utasitds + : Selegedett = *nagyon' £ ( Selegedett == *nagyon™ }{ print ‘Orilunk, hogy elégedett szolgdltatdsunkkal!=; J/ az Ogy£él elégedettségének megdllapitdsa
19; — Gra * Veniriési szerkezetek | 65 Az Selegedett valtoz éntékét a *nagyon*-nal az 6sszehasonlité méveletijel (==) se- séxével hasonlitjuk Sssze. Ha egyeznek, a kifejeés értéke igaz, igy az it kifejezts- hez tartoz6 programblokk végrehajtédik. Bir az el6bbi programban a k6dblokkat kap- esos zirdjelek kOzé zirtuk, ez esak akkor szikséges, ha a blokk tbbsoros. A kivetke- 26 két sor igy elfogadthatc: ( Selegedett == "nagyon" ) print "Ordlank, hogy elégedett szolg4ltatdsunkkal!"; A stilusitmutaték altaléban lebeszéinek arréi, hogy kihagyjuk a kapcsos zérdjeleket az egysoros kédblokkokbdl, mert — igy érvelnek — azok javitisk az olvashatésdgot, 8 meg6vnak azoktél a hibékt6l, amelyek akkor adédhatnak, amikor Gj sorakat adunk egy kordbban egysoros kédblokkhoz. Ha az Selegedett értékét *nem*-re valtoztatjuk és djbol lefuttatjuk programunkat, az it kifejezés értéke hamis lesz, igy a kédblokk nem hajt6dik végre és programunk nem ad kimenetet. Az if utasitas else aga Amikor az <£ utasitist haszndljuk, gyakran szeretnénk, hogy legyen egy olyan alterna tiv programrész, amely akkor hajtdik végre, ha a vizsgilt feltétel nem igaz. Ezt tigy ér- hetjk el, hogy az 4 utasités programrésze utan kiirjuk az e1se kulcsszét, majd a ma- sik kGdblokkot. A szerkezet a kévetkez6: i€ (feltétel) { // a feltétel igaz értéke esetén végrehajtandé progranrész else { // a feltétel hamis értéke esetén végrehajtandé progranrész Az 5.2. példaprogram az 5.1. példaprogram kiegészitett viltozata, Egy olyan alapénel- mezett programblokkot tantalmaz, amely akkor hajtOdik végre, ha az Selegedett éé- ke nem "nagyon". 2 shead> : 5.2. példaprogram - Az else d4ggal kiegészitett if utasitds “nagyon’ ( $elegedett print *Oraldnk, hogy elégt agyfé1 elégedettségének ise ( print *Kérjok, értékelje vdlasztélista megjelenite sor) nem hajtédik végre, Az else- abingészdben a *Kérjok, értékel: Az € utasitis else éginake hatunk, de egy feltétel eredménye azonban tbbre is képes: tObb kife} Azif utasitas else if Miel6tt az else 4gban 5. 6ra + Vezérlési szerkezetek | 67 hajtedik végre. Annyi else if-et irhatunk a programba, amennyi csak jélesik, S6t, ha nines sziikségiink else dgra, vagyis olyan programrészre, amely akkor hajtédik végre, ha egyik feltétel sem igaz, akar el is hagyhatjuk. Az else if (gy is ithaté: elseif. Ez csak izlés dolga. Az 5.3. példaprogram az el6z6eket egésziti ki egy else if 4ggal. chead> 5.3. példaprogram - Egy else és egy elseif Aggal if utasitds
: 25: A Az Selegedett énéke itt ismét "nem" a 11. sorban. Ez nem azonos a *nagyon*-nal, ezén az els6 blokkot a 13. sorban a program figyelmen kivill hagyja. Az else if kifeje- 26s 4 15, sorban az $elegedatt viliozé értékét hasonlitja Ossze a nem" sziveggel Mivel az egyenléség fenndll, ehhez a feltételhez tartoz6 programrész hajtédik végre. 418, son6l az alapértelmezett viselkedés kévetkerik. Ha eayik feltétel sem teljestil, egyszenien kiirunk egy Uzenetet, amelyben visszajelzést kérink. “Tafejenes enh fiiggdien hajtsunk:-végre. Yam az wilt Lf és switch kOz6u, Az Lf-etaz else if. kétal tehetjik fiiggdvé, hogy mi tonénjen. A switeh ést viesgal meg, és annak értékétol foggsen Kiil6r A kifejezésnek egyszerti tipusnak kell lennic Gzdm, csak igaz vagy hamis lehet, a switch ( kifejezds ) ase értéki: ez torténjen, ha kifejezés ére ércdka: : i/ ez torténjen, ha kifejezda @ree break; x ler / oz torténjen, ha a kifejezés éet // egyik felsorole értékkel sem ef } A switch utasitis kifejezése gyakran egyszerden programblokkban case cimkéket talilunk, Az Ut a program a switch kifejezésének érékével, Ha a case utasitis utini résszel folytatdik, a break a program futdsa a switch blokkja utini részre | ram ftlép a kovetkez6 case kifejezéshez tart Ha a kifejerés énéke egyik el6z6 repel default cimke, akkor az utina le si, Acase cimbével elkerdett & son Nest cies | __ case Them igazdn™: case "nem" case "nagyon nem’ print *Sajn4ijuk, hogy nem sikerflt...°; break; ee } Figyeljiink @ break utasitasokral Az 5.4. példaprogramban az i f-es példit dolgozzuk at, ezittal a switch haszndlatira. 1: : : 5.4. példaprogram - A switch utasitds : : 2
2 A11. sorban az $elegedett valtozénak a “nem" értéket adtuk. A switch utasités kife- jevése a 12. sorban ez a valtoz6 lesz. Az els6 case cimke a 13. sorban a "nagyon™ sz0- veggel valé egyerést vizsgilja. Mivel nincs egyezés, a program a kovetker6 case cim- kére ugrik (16. sor). A *nem* sziveg megegyerik az Selegedett valtoz6 pillanatnyi énékével, igy az ehhez tartoz6 programész fog lefutni. A programrész végét a break utasitis jelzi a 18, sorban, 2 A> temélis (hdromtényezs) mivelet egy olyam/2® utasils is képes visszaadni ket kettésponttal elvilasztott kifejezés a ket a virsgilt feltétel hatirozza meg: el ) ?érték_ha_a_feltétel_igaz:értek az utasitis a ? sa: kbzti kifeje ettOspont utinit. Az 5.5. példaprogram ezt az Selegedett viltoz6 értékétol fi ml PUBLIC HTML 1.0 strict//EN* y J www. org /TR/xhtmL /DTD/XHEMLL Bes - példaprogram ~ A ? mivelet h 2 All. sorban az Selegedett hogy énéke "nagyon*-e, veg lesz. r tet tartalmaznak. Igy a k 5. 6ra * Vezériési szerkezetok | 71 Ciklusok ‘Most mar Littuk, hogyan kell dntések eredményét6l figgGen killénb6z6 programrész- leteket futtatni, PHP programoltkal arra is képesek vagyunk, hogy megmondijuk, hany- szor kell lefutatni egy adott programrészt. Erre val6k a ciklusok. Segitségikkel elérhet 0k, hogy egyes programrészletck ismétlOdjenck. Szinte kivetel nélkil igaz, hogy egy ciklus addig fut, amig egy feltétel nem teljesil, vagy meg nem mondjuk, hogy fejezéd- jon be az ismétlés, Awhile ciklus Awhile ciklus szerkezete rendkivill hasonlit az if elagazas¢hoz: while ( feltétel }4 ff valamilyen tevékenység , Amig a while feltétele igaz, a hozza tartoz6 programrész Ojb6l és ujbél ve A programrészen beliil altaliban megvaltoztatunk valamit, ami hatissal le feltételére; ha ezt nem tesszik meg, a ciklusunk a végtelenségig futni fog, Az 5.6 példaprogram a while ciklus segitségével a kettes szorz6tablat irja ki 2 S: 6: 5.6. példaprogram - A while ciklus ‘7: : 3 10 iL :
: "; Mr Sszamlalot+; 1s: } 16: 2> 17:
18: SSS hasonlit a whi te-hoz. A lényegi ki srr vegrehajtédik a kod és esake példaprogram a do..while be. A programrész mindig legalibsb egyszer leful. CTYPE html PUBLIC w3C/DTD XHTML 1.0 Strict/, tp: / /www WS .org/TR/ xhtml /D head> : ebady>
: S.@. példaprogram - A for ciklus hasandlata : : 2
+ + ae 8. példaprogram kimenete teljesen Gsszefogonabbé tette. Mivel a $szamlalo ban van, a ciklus egészének logikaja e a Sszamlalo valtoz6t egyre allitja | 2: ciklusok lehetGséget biztositanak ara, hogy ével kilépjink beléluk. A break utasitds azon Celekidl figg6en szakitsuk meg egy ciklus gy hibik megelézésekor. Az 5.9. y egy nagy szdmot oszt el egy egyre meg is jelen cs shead> stitles5.9. példaprogram
5, 6ra + Verdriési szerkzetek | 75 A példiban a $szamlalo nevi valtoz6nak az 1 kezdeti éntéket adjuk (11. sor), A for uta- sivis feltételes kifejezése ellendrzi, hogy a Sszamlalo nem nagyobb-e, mint 10. A ciklus belsejében a 4000-et elosztjuk a $szamlalo-val és az eredményt kiirjuk a bongész5be. Fz elég lEnyegret6rdnek tdnik. De mi a helyzet akkor, haa $szamlalo értéke a fel- hasznflétél sedrmazik? Ekkor a viltoé éréke lehet negativ szim vagy aki i Vegyilk az els6 esetet: valtoztassuk a $2zamlalo kezdGértékét 1-16 mag 6t6dik futtatasa sorin nulléval kellene osztani, ami nem elfogadh példaprogram ezt azzal védi ki, hogy a ciklus futasit befejezi, ha a $szamlalo valtoz6- bana nulla énék van. DOCTYPE html PUBLIC J/W3C/DTD XHTML 1.0 Strict //EN* “http: //www.w3 .org/TR/xhtml1/DTD/xhtml1-strict dtd" : : chead> : 5.10. példaprogram - A break utasitds haszndl : </head> 1 <body> 3 <div> : <?php. : Sezamlalo = -4; : for ( Sszamlalo <= 10; Sszamlalo++ ) { if ( $szamlalo == 0 ) break: $seged = 4000/Sszamlalo: print "4000 $szamlalo részre osztva Sseged. 2D o> i </div> : </body> 1 </html> ‘Anulléval valé osztés nem eredményez végzates hibat a PHP-ben, csak egy figye!- 4 ‘mezteté lzenetjelenik meg a bangészdbon; a program futdsa folytatédk. Egy if utasitissal megvizsgiljuk a Sazamlalo énékét (13, sor). Ha nullival ¢ 16, azonnal kiléptink a ciklusbél; a program ekkor a for ciklus utini sorokat kezdi feldolgozni. a ta 11, sorban a cil slik meg, hogy a Sszamlale-ta oa ‘an helyzetet utinozzunk, amikor & Sszamlalo értéke kivil aprél vagy egy adatbazisbdl. Accor clk fejébsl birmelyik kifejenéselhagyhatd, df 9 a pontosvessz6ket mindig kik. i ligy, hogy ez ne eredményezze az egész ciklusb6l val6 ki “les kezdetét jelentse. Az 5.10. példaprogramban a break drasztikus volt, Az 5.11. példaprogramban a aullival val6 kozben programunk nem lép ki az egész ciklusb6l. : <!DOCTYPE html PUBLIC *-//W3C/DID XHTML 1.0 Strict//EN" chttp: / /www.w3.org/TR/xhtmld /DTD/xhtmiL- <html> 5: <head> : stitle25.11. példaprogram = A continue ul : ¢fhead> 7 : <body> : <div> <?php. + $szamlalo = -4; for ( ; $szamlalo a, if ( Sszamlalo a4 continue; 15: } sy a $seged = 4000/Sszami ae print "4000 $szamla! 18: ) ‘eg 19: 2> 20: </div> 21: </body> 22: </html> Ina break utasitist cont egyenl6, az éppen folyé ist at Abreak 68 continue utasitésok a ciklus logikajat bonyolultabba, a programot [> _pedig nehezebben olvashatévé teszik, (gy furcsa programhibékat idézhetnek el6, ( ‘exért Ovatosan haszmdlandék, Egymésba 4gyazott ciklusok A ciklusok t6rzsében is lehetnek ciklusok. Ez a lehetdség kiilénésen hasznos, ha fucisi idOben el6allitott HTML tablizatokkal dolgozunk. Az 3.12. példaprogramban két ¢ masba dgyazott for ciklus segitségével egy szorzétablat frank ki a bongészabe, <!DOCTYPE html PUBLIC 27W3C/DID XHTML 1.0 Strict//EN* shttp: //Www.w3.org/TR/xhtml1/DTD/xhtml1-strict dtd cheml> <head> <title>5.12. példaprogram - xét for ciklus egymisba Agyazdsa :
\n"; for ( Sy=1i $y<=12; Sy++ ) ( print "\n" for ( Sxel; Sx<=12; $x++ ) { print "\t*; print (Sx*sy print “\n"; ) print *\n"; ) + print "\n"; > 3
2 Miel6a megvizsgilnank a for ciklusokat, nézzidk meg kézelebbr6l a 11. sort: print "\n"; Vegytk észre, hogy a karakterlane minden idéz6jele elétt karaktert. Ez azért szkséges, hogy a PHP-feldolgoz6 tudjs jelként szeretnénk hasznalni, nem pedig a karakterlane Ha ezt nem tessziik meg, az utasitas nem. lesz értelmes a tor dgy fogia értelmezni, mintha egy karakterlincot egy sz) egy karakterlane bat okoz. Ezt a forditott perjeles meg escaping) hivjak, leckében részletesebben is beszéli A kills6 for ciklus (12. sor) az Sy valtoz6nak az 1 kez fog futni, amig a viltozé nem nagyobb 12-nél, az utols6 ke minden ismétlés utin eggyel n6jOn. A cikIUS torzse végigfurtatja 2 ki (15, sor), ame cellit, és a bels6 ciklus befejeztével visszatériink a kGls6 cikh lizatsort (19. sor), hogy készen dlljunk az tjabb ismétlésre, jezGdik, az eredmény egy izlésesen formazot szorz6tabla lesz. a téblazatot is, a 21. sorban. Kédblokkok és béngész6be irt kimenet A 3. leckében littuk, hogy a PHP nyit6- és zardelemekkel léphettink, illetve kiléphetiink onnan. Ebben a. isokkal szabdlyozou déntési s felelGen mas-mas kimenetet allithatunk el6 a fel ben ezt a kéx megoldlist egyiit fogiuk hasznilni, ‘Tegyiik fel, hogy van egy pro, agramunk, ami ért egy adott viltozé éntéke true. Az 5.13, épit fel egy £ ulasitds kodblokkjanak 5 + : + 2 2 2 2
: "; print ‘
"; print *Ti"; print "
"; print ‘A mai drak dolldrban*; print ‘14
"; 1 Pe
: : Haa 11. sorban az Sar_megjelenit éntéke true, a tiblizatot kifuk. Az olvashatésig, kedvéért a kimenetet eléallité kodot t6bb print () utasitasra bontottul leket ismét ved6karakterekkel littuk el. Ezzel nincs semmi gond, de megtakarithatunk némi gépelést, ha egyszentien visszalépiink HTML médba a kédblokkon beliil. Az 5.14 példaprogramban pontosan ezt tessziik. 2 7: 8: 9:
10: 16: A mai drak dolldrban 17: etd>1d32 18: 19: = 18 && Seletkor <- 35 print “Qzenet fiataloknak
\n"; } else ( print “€ltaldnos dzenet
\n"; } /* a sorok végén a \n ceak a szép forrdsszdveg miatt ke Seletkor = 12; // létrehozzuk a vdltozét if { $eletkor >= 18 s& Seletkor <= 35) ( print "Qzenet fiataloknak
\n’ } else if ( $eletkor >= 1 && Seletkor print *Ozenet gyerekeknekcbr />\n" } else { print "Altaldnos azenet
\n"; } $szam = 1; while ( $szam <= 49 ) { print *$szam\n"s $szam += 2; for ( Sazam = 1; $szam print "$szamebr />\n! } Gyakorlatok 1. Ismételjiik at a vezérlési szerkezetek hogyan lehetnek ezek a szerkezetek a sepits bemeneit6l fiiggden mas-mis viselkedést va HTML tiblizatot jelenitsiink meg! A fella dezésb6l szérmaz6 adatokat egyel6re id Ismételjk at a ? mveletrél tanultakat! M szerkezett6l? Mikor lehet hasznos? 6. ORA Fiiggvények Ebben a leckében a k6vetkez6ket tanuljuk meg: Hogyan hozhatunk létre és hivhatunk meg fag: * Hogyan adjunk ata flggvényeinknek értékeke eredményt? + Hogyan hivjunk meg foggvényeket dinamikusan, viltoz6ban tirolt kara sepitsépével? Hogyan érk el a figggvényekb5l a globilis valtozokat? Hogyan érjik el, hogy fiiggvényeinknek ,emlékezete” legyen? Hogyan adjunk 4t a figgvényeknek adatokat hivatkozaskéne Hogyan ellendrizhetjik egy figgvény k it meghivni gvénycket? s hogyan kapjuk meg tlk az eee ke pesét, mi A fiiggvény a j6l szervezett program lelke, ment a programot kénnyen olvashat6vai és Gj- tahasznosithat6va teszi. Fiiggvények nélkiil a nagy programok kezelhetetlenek leanénck Ebben a leckében a fiiggvényeket tanulminyozzuk és néhany példat mutatunk arra, hogyan kimélhetnek meg attél, hogy t6bbsz5r kelljen megirnunk ugyanazt a kédot. Mit neveziink fiiggvénynek? A fiiggvényt egy gépnek tekinthetjik. A gép & bele wWiltétt t gozik, amig a kivant terméket el6 nem dllitja, vagy el nem veny éntékeket vesz At t6liink, feldolgozza azokat és mth kiirja az ere yt a béngészGbe), vagy visszaad egy € Ha a kedves Olvasénak egyetien siiteményt kell esindlnia, ezret, akkor esetleg késtit vagy beszerez egy siteményst kor elhatérozzuk, hogy fiiggvényt irunk, a legfontosabb s kell, az, hogy az ismétlédések csdkkentésével zsugorodik-e A figgvény valdéban zirt, 6nallé kédrészlet, melyet Amikor meghivjuk, a fgavény t6rzse lefut. A fl ket adhatunk dt, Amikor a figgvény véget ér, a hivonake Fiiggvények hivasa Ketféle fogavény létezik: 2 nyelvbe beépite 7 dltalunk | vény. A PHP-ben rengeteg beépitett filggyény van. A rik els egyetlen filggvényhiviistoil ll: gettype ( $proba ); A femti pékdiban a gettype () fligavényt hiveak t terrel. A program feladata a valtoz6 tipusanak me nveaynt veal (Cts t Ha a fggvénynek informéciét szeretnénk: Az informéciét, amit ily médon adunk ai figgvénynek tobb paramétent kell 4 Valamilyen_fuggveny ( $els Agettype() abbéla ee ttn Figgeiyek | ___ DOCTYPE html PUBLIC /PR3C/DTD XHTML 1.0 Strict//EN* 2 3: “http: //www.w3org/TR/xhtm11/DTD/xhtml1-strict dtd" 4: chtml> 5: 6 : : etitle>6.1. példaprogram - A beépitett abs() fuggvény haszndlata 71 8: +
i 2 2 Ebben a példaban a $s2zam nevii viltoz6hoz a -321-es éri¢ket rendeltak, maj az abs () flggvénynek, amely elvégzi a szikséges szamitisokat €s visszaadja az < rede ményt. Eat az tj értéket rendeljik az Sujszam nevi valtoz6hoz és ki ered- ményt. A feladatot megokdhattuk volna segédvaltozok segitsége nélkill is, ha az foggvénynek kézvetlendl adjuk meg a szimot, majd az egészet dtadjuk a ramétereként: pa print( abs( -321 ) 17 aszniltuk, hogy Az ideiglenes viltozOkat — Sszam és Sujszam —ugyanakkor azért atébb, ha tb egy a folyamat Iépéseit minél viligosabbé tegyilk. A k6d sokszor olv sent kifejezésre bontjuk. ‘A fethasznalo altal megin figgvényeket pontosan ugyanilyen médon kell meghivnunk Fiiggvények Iétrehozisa Figgvényt a function kulessz6 segitségével hozhatunk létre: Finetlon! valamiayensfugaveny( Sparanecar1, Sparaneter? } ( 7/ itt van a foggvény torzse ot) nétercket igenyel, a zirdjelbe vessz6vel elval figgvényhiviskor dtadott paraméterek iny nem vesz at paramétereket. imi, ha a fi PUBLIC XHTML 1.0 Strict//EN™ www .w3.org/'TR/ xhtml 1/DTD/shtmld= se idaprogram - Figgwény 16ti nagyHello() ( mt "HELLOL"; Hello); A femti program egyszeriien kiirja a *HELLO* A programban egy olyan nagyHello() nevd fi at paramétereket. Ezért hagytuk Gresen a. figgvény, mégsem wil hasznos. A 6.3, ? \n"); at 14: sorkiir("Ez egy sor"); 15: sorkiir(*Ez mir egy mésik sor“); 16: sorkiir(*Ez megint egy uj sor"); 17: ? 18:
19: 20: 63. példaprogram kimenetét a 6.1, fibrin Lithatjuk. A 11, sorban a sorkiir ‘egy karakterldneot var, ezén teutik a Ssor nevi valtoz6t a zardjelbe, Amit a so! figgvény zardjelei k6zé tesztink, az keril a $sor nevi viltoz6ba, A flggvény trzsében, a 12, sorban kiigjuk a $sor nevd viltoz6t, majd egy
elemet és egy Gjsor karaktert tesziink utina (hogy a HTML kéd is olvashaté legyen, ne csak a kimenet) Ha most ki szeretnénk irni egy sort a bingész6be (14-16. sorok), akkor meghivhatjuk: a sorkiir() fgevényt, ahelyett, hogy a print () figgvénnyel oldanink mega felada- tot, igy nem kell a sor végét jelz6
kodokat minden sor kiirisakor begépelniink. 6.1, ébra Fagguény, amely egy karakiertdnicot fr ki, majd sort6rést helyez ol wtdna. Erték visszaadésa sajat fliggvél Az. elGa8 pel pan a kiirsor() filggvénnyel karakterlincokat zonban ara lehet szikség, hogy a canara x atadott a italakitot valtozatat), amellyel kés6bb- egy f tg hefejer' a Kigevény fustatdsdt, 6 az énéket visszakcill tml PUBLIC D XHTML 1,0 Strict//EN* www .w3.org/TR/xhtml 1/DTD/ehtmii= \tle>6.4. példaprogram - Visszatérési- fuggvény 1 :
: 5: 6: 6.5. példaprogram - Dinamikus fuggvénynivas: 7: </head> 8: <body> 9: <div> 10; <?php 11: function koszon() { 12: print *J6 napot!<br />": 131) 14: $fuggveny_tarolo = *koszon": 15: Sfuggveny_tarolo(); 16: 2 17: </div> 18: </body> 19; </html> SS Itt @ 14, sorban) a $fuggveny_tarole viltozbhoz a keazon() fiigevény nevével azo- nos karakterlincot rendeltiink. Ha ezt megtettik, a valtozét arra haszndlhatjuk, hogy meghivja nekiink a koszon() fiigavényt, csupin zirdjeleket kell tenntink a viltoz6 ne- ve uttin (15. sor). Miért 6 ez? A fenti példaban csak még t6bb munkt csinaltunk magunknak azzal, hogy 4 *koszon* karakterlancot rendeltik a §fuggveny_tarole nevi valtozGhoz. A din: mikus fliggvényhivas akkor igazin hasznos, ha a program folyasit bizonyos kGralmé- nyektol fogaéen vi jem paraméteréx6l figaGen. Eat & ane Sen mais és mis filggvényt hivhatunk meg A PHP beépitett fiiggvényei még hasznosabba teszik ezta fiiggvény példdul egy karakterkincot haszndl arra, hogy a tomb a filggvényt. Az array_walk() alkalmazisira a hetedile A valtoz6k haték6re a A fiiggvényben bevezetett viltozGk az acott fllggvényre nezve szavakkal: a valtoz6 a figavényen kivilr6l vagy més fig Nagyobb projektek esetén ez megovhat minket attél, hogy lulirja azonos nevd valtoz6ik tartalmat. A.6.6, példaprogramban Iétrehozunk egy viltoz6t egy fi biljuk kifratni a figgvényen kivol, !DOCTYPE html PUBLIC //W3C/DTD KHTML 1.0 Strict//EN* ‘ “http: //www.w3.org/TR/ xhtml /DTD/xhtmll-strie <html> <head> stitle>6.6. példaprogram - Valtozék ‘hal bevezetett vdltoz6 a faggvényen kivaledl </head> <body> 1 <div> <?php + function proba() { Sprobavaltozo = "Ez egy d + print "Prébavaltezé: JF a Oe Rk Ha nem létez6 vaitozéra hivatkozunk, figyelmeztetést (NOTICE) kapunk. A figyel- 2g meztetés alyan hibadzenet, ami nem végcotes hibékhaz lapesolie, Aipcune: 26s szorint a figyelmeztetések nem irécak ki, de e7 a viselhedés aphp. ini féjl error_report ing (hibsjelentés) utasitésaval megvéltortathats, Ha az emlitatt utasitésban fettiintetjiik 82 E_NOTICE jelz6t, ezek az lizenetek is megjelennek. A figyelmezetéseken kivil inden més hibatizenetet is bekapesolhatunk, ha a ko- vetkezdképpen médositjuk az error _repo ing Utasitést a php. ini fajlban: error_reporting = E_ALL & -E_NOTICE 6.2 dbra Kisérlet flgauényen belli viltozéra valé htvatkor<sra Hasonléképp, a fggvényen kivil meghatdrozott valtoz6 nem érhet6 el automatikusan a figavényen belulr6l. Hozzéférés valtoz6khoz a global kulcssz6 segitségével Alapénelmezés szerint a fiiggvényeken beliilr6l nem érhetjiik el a mashol me zott valtozdkal. Ha mégis megprobaljuk ezeket haszndlni, akkor csak helyi vi Bunk létrehozni vagy elérni, Prdbéljuk ki ezt a 6.7. példaprogrammal. DOCTYPE html PUBLIC 'D XHTML 1.0 Strict//EN" / www ws org/TR/xhtml1/DTD/xhtmLl-si tles6.7. példaprogram - A fOgavényen kival a fUggvényen bell alapértelmezés szerint et = 42; ction eletErtelme() { print "Az élet értelme: $elet<br /=! Ertelme(); 1 </body> </html> AG7, példaprogram kimenetét a 6.3, abrin Lithatjuk., figgvény nem tudja elémi az Selet valtezét a 11. Jal Ures. Ezt Kithatjuk, amikor a fliggvény kina a. valtou6 & é ez jo dolog: megmenekiltiink az azonos nevil v4 métert igényelhet, ha meg szeretne tudni valamit: «yey fontos obilis Riggvényen kvl kant paraméterként at kellene adnunk. Ez az a <titlesé.8. pé: kulesszé segitsdgéy </head> i <body> <div> ‘<?php EE : Selet: function eletErtelme() ( global Selet; : print "Az élet értelme: Seletcbr />*; eletErtelme(); 6.3. dbra Globalis vdltox6 etérési hisérlete flgguényen bolilrdl. A628. példaprogram kimenetét a 6.4. abran lithatjuk, Miutin az eletere: vényben az Selet valtoz6 elé a global kulessz6t tesszik (14. sor), a Figg akuls6, globalis $elet valtoz6t (11, sor) érhetjuk el. Minden figgvényben, amely globilis viltoz6t szeretne elémni, haszndlnunk kell a global kulesszét. Legytink 6vatosak! Ha most az Selet nevil viiltoz6t a fliggvényen bell megvaltoztat- juk, annak a program egészére hatasa lesz, A global utasitissal egyszerre tObb vlltoz6t is b nunk azokat vessz6vel: svaltozol, Svaltozo2, $valtozo37 OBALS ,szuperglobiilis” t6mbbel is. A 10. leckében a a globalis valtoz6kat a programban barhol elérheyjik 6.4, dora ‘Tobi altos flggnéaybGt tnen stheres oénie a gible A Servo, extat anTe e miter megvéltoztatdsénak a fiiggvéiny : ban egy globélis véltoz6 értékét i ‘ visi i aaiotat kulessz6rél Gjonnan szerzett tu tuddsunkat, Ennek alapjan a 6.9. példaprogramhoz hasonlét ithatnank, isunkat, Ennel + <!DOCTYPE html PUBLIC *-//W3C/DTD XHTML 1.0 Strict//EN* “http: //www.w3.org/TR/xhtm11/DTD/xhtmli-strict dtd" <heml> : chead> + <title>6.9. példapregram ~ vAltoz6 értékének faggvényhivisok kOzti meg6r2ése a global kulcsszé segitségével</titie> Vi <shead> B: <body> 9: <div> 10: <?php 11: $fvHivasokSzama = 0; 12: function szamozottCimsor( $cimszoveg ) ( 13e global $fvHivasokszana; $fvHivasokSzama++; print “<hI>SfvHivasokszama. $cimszoveg</hi>"; } + szamozottCimsor("Alkatrészek") ; print “<p>Az alkatrészek széles skdl4jat gydrtjuk</p>"; szamozottCimsor (*MOtyardk") ; : print “<p>A legjobbak a vildgon</p>"; 2 221 </div> 23: </body> 24: </html> Ez Ggy mdkédik, ahogy azt virtuk. A 11. sorban létrehoztuk az $fvHiva: vo valtoz6t a szamozottCimsor () figgvényen kivul. A valtoz6t a fiigav a global kulessz6 segitségével elérhetGve tettiik (13, sor), A 6.9. példaprogram kime- netét a 6.5, dbrin latharjuk, okSzama ‘Valahdinyszor meghivjuk a szamozottCimsor () nevi fliggvényt, az $ivHivas: viltozd étéke eggyel n6 (14. sor), maki a szimozéis kiirisaval a cimsont teljess¢ tesszilk, 96 | Il. rész + A PHP nyelv 1, Alkatrészek ‘alka sis hile gyi 2. Mityiirok ‘logo vin rad, Masrészt a fggvény hiviisr6l hivasra .e Program a 6.9, példaprogramnak a static ki + <!DOCTYPE html PUBLIC “-//W3C/DTD XHTML, 1 “hLtp: //www, W340; i <html> i shead> 1 <titles§.10, 2ése a static a </head> <body> 1 <div> —— oO 1s static $fvHivasokSzama = 0; 13: SEvHivasokSzamat+) a , print "<h1>StvHivasokSzama. $cimszovege/hi>"; 16; 7 17: szamozottCimsor (*Alkatrészek") ; 18: print "<peAz alkatrészek azéles juk</p>*; 19: szamozottCimsor (*Matyarsk"); ec 20: print “<psA legjobbak a vildgon<p>"; Ql: </div> 22: </body> 23: </html> A szamozottCimsor() filggvény igy teljesen fiiggetien lett. Amikor a 12. sorban beve- zetjok az $fvHivasokSzama nevi valtoz6t, kezdSénéket adunk ne} akkor trténik meg, amikor a fggvényt eloszir hivjuk ( : a flggvény miisodik meghivasakor (19. sor) figyelmen kiviil hagyja a PHP, ebel i ) fli ingédnunk & globilis valto- 76k miatt. Bar a 6.10. példaprogram kimenete teljesen megegyezik a 6.9. példaprogra- méval, a programot elegansabba tettik. Tovabbi részletek a paraméterekrél Mar lattuk, hogyan kell figgvényeknek paramétereket dtadni, de van még néhany hasznos dolog, amir6l még nem beszéltiink. Ebben a részben megtanuljuk, miként le- het a fiiggvényparamétereknek alapértelmezett ertéket adni, €s megtanuljuk azt is, ho- gyn kell valtoz6inkra mutaté hivatkozast diadni a valtoz6 énékenek maselats helyett yet a Paraméterek alapértelmezett értékének megadasa hoz. Eddig azt mondtuk, hogy # fugevények tsbbsége pa ramétent elhagyhat6vi téve filgevényeink rugalmasabbd vilna A.6.11. példaprogramban létrehozunk egy hasznos kis figavény' i lancot egy HTML cimsorelembe zar. A flggvény hasznalopinak megadjuk a lel get, hogy megvaltoztathassa a cimsor méretét, ezért a karakterlne mellé kell egy Smeret nevi paraméter is (10. sor). Haa kod a Smeret paraméternek az 1 Gnéke ja, a $ezaveg valioz6ban levé karakterlanc <h1> elemek kézé keriil, ha a Smeret 2, akkor <h2> elemek kozé, és igy tovibb. példaprogram - Két paramétere | tez( Sszoveg, Smer@t ) ‘et>$szoveg</h$meret>' A 6.11. péktaprogram kimenetét a 6.6. abrin lathatjuk, de a cimsorméretet esak ritkiin sziikséges me zisinak zardjelén bel m adunk énéket ennek a paraméternek, ket fogia felvenni, A 6.12, példaprogram ennek ¢ Smeret paramétert elhagyhatGva. | <!DOCTYPE html PUBLIC ¢IW3C/DTD XETML 1.0 strict//EN* [hetb: //www.w3.org/TR/xhtml1/DTD/xheml1-strict.dede <html> <head> stitle>6.12. példaprogram - raggvén paraméterrel ieee ores $szoveg" simsorMeretez(*Konyvcim", 1); cimsorMeretez("Fejezetcim", 2) : cimsorMeretez(*Alfejezet cime"); cimsorMeretez("MAsik alfejezet cme"); + renee Ha a cimsoreretez() fiiggvénynek van masodik param a Smeret nevil yaltaz6t ez fogia meghatlirozni. Ha a fgevényhiviskor nem adunk meg mésodik paramétert (lisd a 15. és 16. sort), akkor a flggvény a3 én Annyi elhagyhat6 paramétert adhatunk meg, alinyat esak akarank, de ha egy paramée- mek alapéntelmezett étéket adtunk, az dsszes tobbi paraméternek is adnunk kell ilyet alu Valtoz6kra valé hivatkozdsok dtad4sa fiiggvényeknek Amikor a fgevényeknek paramétereket adunk at, a helyi paraméterviltozdkba a para- méterek értékének misolata kerill. Az e valtoz6kon végzett miveleteknek a fiiggvény- hivs befejezGdése utin nincs hatisuk az atadott paraméterekre. Ennek igazolisiira fut- tassuk le a 6.13. példaprogramot. : ? 6.13. példaprogram - Fuggvényparaméter érték szerinti d4taddsac/title> { ch ( $regiszam )7 nF Az ot tel Tabb () fliggvény egyetlen szamot var, majd Ot6t ac ke nines. A program Li, soriban a $regiSzam nevil 15. Sorban ezzel a valtoz6val meghivjuk az ot tel TOBb(} | waltoz6 énékének mis Gitel néveljik, ennek nines hatisa a $regiszam Gnékére, A hivas utin a Alapértelmezés szerint a fliggvények paraméterei érték s kal, a valtozdk émékérél helyi masolat készil. Lehet6ségiink van arra is, hogy ne a viltozé énékét, junk at. (Eat cim szerinti paraméterétadasnake is hiv A.6.14. példaprogram ezt a médszent mutatfa m nek hivatkozésként adunk dt paramétert, tadott viltoz6 ($regiszam) tartalmdval \aval. A paraméteren végzett barmilyen két is. Hivatkozisokat fiiggvényeknek tigy a paraméter neve elé egy & jelet tesziink a f 6. dra * Fliggvények | 101 9: <div> 10: <?php 11: function ottelTobb( &gszam ) { 1de $szam += 5; iy id: SregiSzam = 10; 15: ottelfobb( $regiszam ); 16: print( $regiSzam ); 17: ?> 18: </div> 19: </body> 20: </html> Mostandig ditalénos volt, hogy a cim szerinti dtadést a hivé kédban allitjak be, nem pedig a fiiggvény meghatérozésaban (hivési idejd cim szerinti paraméterat- adés). Ennél a médszernél az « jelet a fiiggvényhivasban tesszik ki a valtoz6 elé, nem pedig a filggvény meghatdrozasaban. Méra ez a megoldas elavult, haszndla- ta nem javasolt. Ha olyan kényvtdrat hasznalunk, amelynek kédja még ezt az el- avult médszert kéveti, ideiglenesen kapcsoljuk ki a PHP figyelmeztetd iizeneteit a allow_call_time_pass_reference utasités bedllitasdval a php. i fajiban. Hivatkozasok visszaadasa fiiggvényekbél A fidgavények érték szerint adjik vissza az eredményt, ezért ha bi adunk 4t egy valtoz6t egy fgavénynek, majd a kérdéses valtozét visszaadjuk a hiv kédnak, a valtoz6 ért¢kének masolatit kapjuk vissza, Alapértelmez: toz6hivatkozist adunk vissza, de ez a viselkedés megvaloztathat: egy & jelet a flggvény neve atkoxis (cim) szerint hhez tegyiink ki function $ottelTobb( $szam ) ( $szam += 5; return §szam; ‘A Sezan e2zel hivatkozis szerint adédik dt az ot te? Tob» () fggvénynek, és igy is kapjuk vissza. Ennek illusztralasdra hivjuk meg az ottelTobb()-«t: Sregiszam = 10; §vissza_szam = $ ottelTobb( $regiszam ); Sregiszam += 10; print( Svissza_szam ); f/ 25-0t ir ki ll, rész'* A PHP nyely kédrészletben az ot tel Tobb () hivasdnak szan-hoz rendeljilk. Figyeliak meg, hogy a tink egy & jelet, hogy kikényszeritsiikk acim szerinti howz! iszan-hoz hozziadunk 10-et, a viltozds a $vissz . tehat a két wiltoz6 felcserélhet6vé valik, Névtelen fiiggvények létrehozasa A programok v Z ilyen figgvényeknek nem adunk nevet, hanem valtoz6kban nyeknek adjuk at Gket, névtelen fiigavényekként ist ek. / Kine-paramétent vir. Az elsnek a paraméervaltoz6k: tartalmaznia, pontosan ugyantgy, ahogy egy szabvanyos fi a misodik paraméter tartalmazza a fiiggvény an 4.6.15. példaprogramban egy egyszerd névtelen Bggveny szimot ad dssze. !DOCTYPE html PUBLIC //A3C/DID XHTML 1,0 Strict/, tps //wwW. Wd ona + shtml> % + chead> 7 : ctitlesé.15. példapr </head> pelpercarae nian + <body> : <div> + <?php : Snevtelen = create function + print $nevtelen( 3, 9 j t Af 12-8 fx ki </div> ‘ <body> ‘ A create_function() masodik paramétere a figgvény térese. Ne felejtsik el tehét az ebben a karakterlineban taldlhaté utolsé utasitést pontosvessaével lez, mM masképp a2 értelmez6 panaszkodni fog, és nem hajtja végre a névtelen figgvenyt. Fiiggvények létezésének ellenérzése Lithattuk, hogy nem mindig tudjuk, hogy egy fugevény létezik-e, miclétt megpribyil- juk meghivni. Ha kédunk péleldul olyan fogavénynévvel dolgozik, amit egy viltozban Hrolunkk, hasznos, ha valahogy ellenGrizhetjak a fliggvény létezését, miclétt meghiv- nank. Emellett a PHP-feldolgoz6 kilkinboz6 vahozatai mas-mas szolgiltatisokat nyij- hatnak, ezért ha olyan programot irunk, amit esetleg tbb kiszolgakin fognak futtatni meg kell gy6z6dniink r6la, hogy a kulesfontossigd szolgilatdsok elérhetSk-c. Pélciul ha a mysql szolgaltatasok elérhetwk, irhatunk olyan kédot, MySQL4+ hasznalja, de ha nem, akkor esak egyszerd szivegfdjlba naplézhatunk. Egy adott filggvény eléshetdségét a function_exists() fliggvénnyel ellendrizhetiik Ez a fllggvény egy karakterlancot vir, amelyben a kérdéses fiiggvény neve takilhat truetiad vissza, ha a fliggvény létezik, és false éntéket, ha nem. A 6.16, pékiaprog- ram a function_exists(), illetve a fejezetben tirgyalt (Gbbi lehetdség makideset mutatja be, 1: <!DOCTYPE html PUBLIC 2: *<//W3C/DTD XHTML 1.0 Strict//EN* 3% "http: //www.w3 .org/TR/xhtml 1 /DTD/xhtm11 43 chtmls 5 6 ict .dtd* : <head> : % <titles6.16. példaprogram - Fuggvény 1étezésének ellendrzése 7: 8: 9: Saz0vede/$kod>\nt pindex( $szoveg J { Ssszoveg"; ormaz(*bt, *£élkowér szoveg!}r lll ér szoveg hort on('$szoveg", idézdjeles sz6veg" Kat fliggvényt hozunk létre: a 12, sorban.a formaz() visoindex() flggvenyt. A formaz () hérom kara ct, a formazando szdveget,illetve egy nyel, a formazand6 szveget, amelyet aztin Amikor a 22, sorban elész6r hivjuk meg a formas ( koveér sz6veg karakterlincot adjuk at neki, Paraméternek, a program az alap a function_exists() meghivasd ell nak megfelelé figgvény, Természetesen a viloz6 tanalmat

kodak kbzé k A Lormaz () kévetke26 hivsakora harmadik paraméterként az ali ekkor megtalilja az alsoin $+ Fagg | 105 Osszefoglalés Ebben a leckében megtanultuk, mik azok a figavén yek, és hogyan kell ket haszndlni Megtanultuk, hogyan kell létrehozni és ee, fitadni airs Elsajdtitouuk agiobal ésa static kulesszavak haszndlatét. Megtanultuk, hogyan kell a fligevé- nyeknek hivatkoziisokat itadni és a paramétereknek alapértelmezeu énéket acini, \ gill tanultunk a névtelen fiiggvények Iérehozsir6l, és ard hogyan ellenGrizhetjiik egy filggvény létezésé, Kérdezz-felelek Agiebal kulessz6n kivn! van mas méd arva, hogy egy fiigevény hozzé tudjon férni egy globéilis vdlrozShoz vagy médositerni tudja azt? A globilis viltoz6kat a programon beldl barhonnan elérhetjk a SoLOBALS nev Deépitett tarsitisas (asszociativ) tomb segitségével. A sproba nevil glotvilis v toz6t példdul $GLOBALS[ 'preba" ]-ként érhetjlk el. A a kévetkez6 leckében tanulunk. A globillis valtoz6kat a fiigevényen bell akkor is médosithatjuk, ha a fiiggvény Paraméterként egy arma mutaté hivatkozast kapott. Leket-e a filgguényhivdsokat a wiltozékhoz hasoniéan karakterlancba dgyazni? Nem, A filggvényhivasoknak az idézdjeleken kivil kell lennitik Ismétlés Ismétlé kérdések 1. Igaz-e, hogy ha egy fugevénynek nem kell paramétert stadni, akkor a figevény neve utin nem szilkséges kitenni a z4rdjelpan? 2. Hogyan Iehet filgevényb6l érvéket visszaadni? 3. Mit ir ki az alabbi kodrészlet a bongész6be? Sszam = 50; rsitisos tmbokrél function tizszer() { $szam = $szam * 10; } tizszer(); print $szam: i" 4. Mitirki az alibi kédrészlet a bongés25be" $szam = 50; function tizszer() ( global $szam: $szam = $szam * 10; 106 | W rész» A PHP nye tizezer(); print $szam 5, Mit ir ki az alibi kodrésalet a bongész6be?, gszam = 50; function tizszer( $sz J © gez = gaz * 10) on tizezer( &$sz ) { Sez = Sez * 10; r( $szam }; t Sszam; Valaszok 1. Nem igaz. Mindig ki kell tenni a zirdjelpart, akar nem, A return kulesszé sepitségével, A programrészlet kimenete $0 lesz, A tizs: bilis Sszam valtoz6hoz, A meghivas sorin a dolgozik. A programrészlet 500-at fog kifeni, Mivel a tizszer() figgvény igy mar f . A programrész 50-et ir ki. Amikor ; adunk at, az dtadis érékc szerint adédik at. A figgvényen beloli Vili Sszam valtoz6ra semmilyen he 7. ORA Tombok Ebben a leckében a kovetkezket tanuljuk meg: + Mik a témbdk és hogyan he: + Hogyan éthetjOk el a témbdt * Hogyan rendezhetjk a tx + Hogyan hozhatunk létre rugalmasabb foggv nyeket a tomb3k segitsegevel? HP programok Ssszetert Atombak és a kezelésiket segit6 eszkoz6k nagymenékben névelik rugalmassigit. Ha j6l értiink a tombkhdz, képesek vagyunk nagymére adatszerkezeteket tirolni és kezelni. Ebben a leckében bemutatjuk a tmbéket és néhiny filggvényt, amelyek segitik a velUk valé boldogulist. 108 | Il, rész + A PHP nyely Mit neveziink tombnek? Mint mar td Valtoz6k informaciét iz , fel és ir ki. Egy valtoz6ban azonban sa tarolhatunk. A témb ezzel szemben olyan killénleges szerkezet nines ilyen korlito: tombbe annyi adatot lehet beletenni, ikarunk. Minden elemet egy szm vagy egy karakterldne seg Ha a valtoz6 .védér", akkor a tomb ,iratszekrény*, tehat olyan t sok elemet térolhatunk, Természetesen ha Ot értéket kell tirolnunk, megadhatunk 6t \GmbGt haszndini viltozk helyett? Elszbr is azért, mert a tomb chet benne két vagy akr kétsziz énék, és ennek elérése tovabbi valtozokat létrehozni, Masodszor, a tomb6k elemeit ke kent is. Ha akarjuk, végighaladhatunk a tombOn egy az elemeit egyenként. Lehetségiink van a témbét rendezni rendezés szerint (angol abécé!) vagy sajat rendezGely alapjdin. A tomb elemeit az index segitségével knnyen elérhetjik, Az karakterline is. Alapértelmezés szerint a tomboket sz4mokkal indexeljOk elem indexe 0, Ebb6l az kovetkezik, hogy az utols6 kisebb a tomb méreténél, Ezt ajinlates mindig fejben A7.1. tablizatban a fe1hasznalek tomb elemeit a tomb harmadik elemének indexe 2, 7. 6ra * Tambik | 109 Témbék létrehozasa Atombok alapértelmezés szerint énékek sz4mmal indexelt listi, Enéket egy tombhoz kétféleképpen is rendelhettink: az egyik méd az array () figgvény haszndilata, a masik a tombazonosit hasandlata szbgletes zArdjelekkel ([]), A koveikez6 két részben mind a kétféle valtozatal talilkozni fogunk. Tombok létrehozésa az array() fliggvény segitségével Az array() flggvény akkor hasznos, ha egyszerre tbb értéket szeretnénk egy tomb hoz rendelni. Hozzunk létre egy $felhasznalok nevi toml négy elemet: s rendelitink hozzi Sfelhasznalok = array ("Berci", "Marci", “Aladdr", Most a $felhasznalok témb harmadik elemét, melynek indexe 2, irassuk ki: print $felhasznalok[2]; Ez a kovetkez6 karakterlancot fogja kimi: *Aladar*. Az indexet a tomb neve utin kézvetleniil kovetkez6 szigletes zirdjelbe kell imi. A tombelem irisakor és olvasasakor is ext a jeldlést kell haszndlni Ne felejtsik el, hogy a tmbbk indexelése alapértelmezés szerint nullit6l indul, igy barmely tombelem indexe eggyel kisebb az elem tombbéli he! Témb |étrehozdsa vagy elem hozzdadasa a timbhéz szigletes z4réjel segitségével Tombdket gy is létrehozhatunk, illetve meglev6 tmbbkhdz Gj ele 4 tomb neve utin olyan szbgletes 24rdjelpant irunk, amelynek belse}ében nincs index. Hozzuk létre Gjra a $felhasznalok nevi témbot: $felhasznalok(] = “Berci"; $felhasznalok[] = "Marci": Sfelhasznalok[] = "Aladdr $felhasznalok[] = “Eleonéra™: Figyeliuk meg, hogy nem kellett szimot imunk a szbgletes ardjelbe. A PHP automatiku- san meghatérazza az indexértéket, igy nem kell nektink bajlédni azzal, hogy kiszimitsuk akévetkez6 olyan indexet, amelyben még nines énék. 110 | I. rész * A PHP nyelv Névzilk a kovetkez6 programrészletet: alok(0] = “Berei™y (200) = "Marci®; A tombnek mindéssze két eleme van, de az utols6 elem éri¢ket adni a kdztes elemeknek, ami félreértésekre ae oko {sa mellett a tmbvaltoz6k szdgletes zir6jele horott tmb végéhez Gj elemet is adharunk. zieiben létrehozunk egy tOmb6t az array () figgvény adunk a tmbhiz szigletes zirdjel segitségével. y ("Berci*, "Marci, "Anna Tamb feltéltése az array_fill) fiiggvénnyel Ha egy tombét alapéntelmezett éntékekkel szeretnénk az array() fiiggvényt, valahogy fgy: i Stagtipusok = array( "szokdsos", "szokdsos™, Ugyanakkor az iires szégletes zirdjeleket is Stagtipusok[] = "szokdsos"; Steqtipusok|] = "szokAsos"; Stagtipusok[] = “szokdsos*; Stagtipusokl} = *szokdsos A PHP azonban eme feladat vég mas fUggvénnyel. Az array_€i11(} | ioiet pecan ou adja meg, é a timbbe A tirsitésos tomb&k létrehozisa is az array () fggvény vagy a tes zirdjelek segitségével trténik. tombazonasité szdgle- Gles. Nem kilénbGz6 tipusok, mint a Perlben a tmbak és a hasitotablak (kivenat, hash), ennek ellenére helyes az a horéllas, ha killin-kilin kezelik éket, mert az egyes tipusok mis hozzétérési és kezelési médot igényelnek. ? A szmmal és a karakterlénceal indexelt tsmbék kati hatarvonal a PHP-ben nem Tarsitésos tombék létrehoz4sa az array() fiiggvény sagitségével Ha tirsitisos tombot szeretnénk Kétrehozni az array () fiiggvény seg el, minden elemnek meg kell adni a kulesit és az énékét, Az alébbi programrészlet egy skarakt nevi Lirsitiisos tmbot hoz létre négy elemm Skarakter = array ( "nev" => "Jénos* ‘foglalkozas" "eletkor" => 30, “kulonleges kepesseg" => “rontgenszem* “sruperhés", ie Most elérhetjik a §karakter elemeit (mez6it); print Skarakter[‘eletkor']: A tarsitisos tmbékben a kulesok karakterlincok, de az alapértelmezet hibajelentési szint szerint a feldolgoz6 nem fog panaszkodni, ha nem tessziik ki az idézojeleket Ugyanakkor az idéz6jelek elhagy.isa a tombkulesok esetében nem tandcsos, ugysnis ha aszokisosnal magasabb hibajelentési szint van bedllitva, a feldolg elemnél hibit jelez majd. Ami pedig még ennél is rosszabb, ha egy tmbkules egybeesik egy dllandval, a kules helyére behelyettesit6dik a minden ilyen Gjel neki land6 értéke My A térsitésos t6mb kulesait idézojelbe kell tenniink, ha a kérdéses kulesok karakter- lane-literdlok: q print $karakter[eletkor]: // helytelen Print $karakter["eletker"]; // belyes Ha a kulcsot valtozSban téroljuk, az idézdjelekre nines sziksdg Seletkorkulcs = “eletkor" print $karakter[Seletkor); // helyes 112 | IL rész + A PHP nyely os wémbét Ogy megnevezett elemhez (mezohz) Gj értéket T egyszeriie létrehozzuk deliink éné nev] => *dAénos lalkozas*] => "szuperh6s™; thor") => 307 Tobbdimenziés tombék tig azt mondiuk, hogy a tmbdk elemei értékek. A Skea az elemek kil irom karakterléncot tartalmazott, ERY p azonban -gy kicsit bonyolultabb, Egy témbelem va vagy akir egy msik tim is. A t6bbdimenzi6s tSmb val jk el, hogy van egy tombtink, amelynek tmbdk az el dik elem harmadik elemeét, két indexet kell hasznalnunk: $tomb(1] (21 A tény, hogy egy tmbelem maga is lehet tmb, multabb adatszerkezeteket kezeljink viszonylag 4 egy tmbet ir le, amelynek elemei tirsitasos DOCTYPE html PUBLIC TREEDE / fond. W3 og /TR/schtml Lf chtml> : : stitles7.1. példaprogram Agurshosane/ ites = a! a

“fogl: Se "eletkor* => 30, “kulonleges kepesseg" 18: Ve 19: array ( 20: ‘nev* => "Szilviat, 2: *foglalkozas* -> ‘szuperhés-, 22 teletkor" => 24, 23: ; skulonleges kepesseg" => “emberfeletti ers 24: Z 25 array ( 26: "nev" => "Mari", 27: "foglalkozas" => "f6gonosz", 2a: “eletker" => 63, 29: *kulonleges kepesseg" => “nanotechnolégia® 30: ) 31: Ws 32: 33: print $karakterek [0] (foglalkozas]; 34: (/kitrja, hogy szuperhés 35: 2 36:
37: 38: EE NRREREEERENNENENRN interne Figyeljiik meg, hogy array() fliggvényhivasokat épitewiink egy array () fWiggvény vasba. Az els6 szinten adjuk meg a témbét, melynek minden eleme virsitasos tomb, A Skarakterek(2] tsmbelemhez térténd hozziféréskor a 12, sorban kezd6d6 legfelsé saint témbnek a 25, sorban kezd6d6 harmadiik elemét, egy tirsitisos tmbot kapunk A tarsitsos tomb barmely elemét elérhetjik, példaul a Skarakterek (2) [*nev') énéke “Mari* lesz, a Skarakterek(2] ['eletkor'] pedig 63. Ha a fogalmak tisztik, tirsitisos és hagyomAnyos tmbdk pirositasaval egyszenien hozhatunk Iétre dsszetett adatszerkezeteket. Tombék elérése Eddig azt Littuk, hogyan kell témbdket Iétrehozni & el néziink néhdny lehet&séget, amit a PHP a tWmbdk eléré: saerzésére biztosit. eket adni azokhoz. Mast végig- illetve réluk informaciok 114 | Ih.rész * A PHP nyely Tamb méretének lekérdezése A tomb barmely elemét elérhetjik indexének, heen elhasznalo(4); 0 = array ("Berci, *Marci*, *Aladdr! k [count ($felhasznalok)-1]; Figyeljk meg, hogy egyet ki kellett vonnunk a count () altal Ez azért van fgy, mert a count () nem az utols6 elem a tOmbelemek szamat. Ha azonban. a lehetdséggel. Bar a count () a tomb méretét adja meg, ezzel a méd a témb utols6 elemét, ha ez elemek sz4moz4sa folytone a $felhasznalok tombot véletlenszerti Sfelhasznalok[66] = “Berci=; $felhasanalok[100] $felhasznalok[556] = "Aladdr"; Sfelhasznalok(703] = *Eleonéra™; Account () itt mit sem ér, ha az utols6 elemet. négy ¢lembél all, nincs 3 indexti eleme, Ha folytonosan indexelt, az utolsé elem kinye ‘Az aldbbi utasftds kiirja a $felhasznallok t figgetlenal: print end(Susers) ; 7.6ra + Tombk | 115 Tomb bejarasa ‘Tobb médja van annak, hogy egy tomb minden elemét végigjirjuk; a leghatékonyabb talin a PHP foreach szerkezete. A szmmal indexelt Wmbokre a foreach szerkeretct {gy kell haszndini: foreach ($tombnev as $atmeneti) { tt } |A Stombnev a témb neve, amit végig szeretnénk jami, az Satmenet i pedig cay wl amelybe minden ismétlés sorin a tomb egy-egy eleme keriil. Az aldbbi példaban egy szdimmal indexelt témbdt hozunk létre, és a foreach verérlési szetkezet segitségével éxjlk el annak elemeit §felhasznalok = array ("Berci", “Marci~, *Aladdr*, foreach( $felhasznalck as Sszemely ) ( print "Sszemely
"7 *Eleonéra* ) A program kimenetét a 7.1, dbrin lathatjuk. 7.1. bra Tomb bejéndse. A tomb minden eleme 4tmenetileg a $szeme ly valtozdba kerilt, amit a program kifr a bOngész6be. A Perlben gyakorlatal rendelkezSk vigyaizzanak, a for a két nyelvben jelentOsen kilinbdzik! A Perlben ha az atmeneti valtoz6 encket meg- valtoztatjuk, a megfelelo tombelem is megvatozik. Ha ugyanezt az el626 példiban lessziik, a $felhasznalok tomb éntéke nem fog megvaltozni. 116 | I. rész * A PHP nyely Tarsitésos témb bejaraésa a Lirsitisos tmb kulest és értékét is el szeretnénk: each szerkezet haszndlnunk. Imag az elemek kulcsa jelenik meg, az Sextek pedig egy” az egyes énékeke 7.2. példaprogramban létrehozunk egy tarsitsos juk a tomb elemeit, : ‘ + 7.2 példaprogram - Térsii ‘ea foreach segits L< 7: <head> 8: <body> 9: <div> 10: <?php al: Skarakter = array ( 2: cnev" => “Jénos* 13: “foglalkozas" => “eletkor™ => 30, </div> </body> $e Tob] TT Ane 11. sorban hozzuk létre, a 17. sorban pedig a foreach utasitissal végig- megyiink rajta. A kulesokat egy skulcs nevti valtozoba helyezziik, az értékeket pedig egy Sertek nevibe, A kifris a 18. sorban tonénik. A 7.2 P 272, fibrin lathatjuk, tonénil _ példaprogram kimenetét 7.2, abra Tetrsitdsos mb hejdirdsaa Tobbdimenziés tamb bejarasa Most muir ismertink olyan médszereket, amelyek segitségével a 7.1. példaprogramban <!DOCTYPE html PUBLIC J/3C/DTD KHTML 1.0 strict//EN* http: //www.w3.org/TR/xbtml1/DTD/xhtmii-strict.dtd* + <html> <head> : <title>7.3. p&ldaprogram - Tobbdimenziés tomb bejdrdsac/titie> </head> + <body> + <div> <?php i Skarakterek = array ( array ( ‘nev? => "Jénos™, *foglalkozas" seletkor= => 30 “kulonleges kepessea” *szuperh6s*, *rontgenszem" 118) nész © APHP nyelv ‘nev => "Szilvia’ *foglalkozas* => “eletkor" => 24, ol vlonleges kepesseg" => "emberfe ) ral, szuperhés", array snev' => "Hari", "foglalkozas" => "fégonosz", ‘eletkor" => 63, *kulonleges kepesseg" => "nanote! foreach ( $karakterek as Sazemely } { ( $szemely as $kules => Sertek print "Skulcs: Serteksbr />"7 print "<p> 7.3. példaprogram kimenetét a 7.3, abran Id (a 32, €5 34, sorban). A kdls6 ciklusban as meit vesszk végig, az egyes elemek pedig a A Sszemely maga is Uirsitisas tomb, ezért ‘Firjuk végig (a 34, sorban), és az az Sertek viltozékban térolédnak) 7. 6ra * Témbok | 119 Annak érdekében, hogy ez a médszer j6l mGk6djin, biztosnak kell lenniink abban, hogy a Sszemely valtoz6 valéban mindig tmbét tartalmaz. A kédot megbizhatébba tehetnénk, ha meghivnink a Sszemely valtoz6ra az is_array () figgvényt, ami igazat ad vissza, ha a valtoz6 tomb, és hamisat, ha nem az, A mésik megolds, ha a 29. sorban létrehozott Sszemely valtoz6t (ipusdtalakitissal tombbé alakitjuk, hogy mindlig tmbot kapjunk, barmilyen tipusként is hoztuk létre: $ezemely = (array) $szemely; Tambok vizsgélata a print_r)figgvénnyel 7.3, példaprogram azt mutatta be, hogyan haszndlhatjuk a foreach ciklust a tmbik clemeinek elérésére, Ha milveleteket akarunk végezni egy tombbel, vagy szépen akar- juk megieleniteni az adatokat, ez rendben is van, de ha csak gyors pill vetni a tomb tartalmara, hogy hibakeresést végezzink egy programban, tilzottan sok munksinak nik. A print_r() fggvény azonban birmilyen valtoz6t elfogad paramé- terként, é informdciés fr ki annak tartalmirdl és szerkezetér6l, Ha a fggvenyne vombéx adunk at, atémb elemeinek listéjit kapjuk meg. A print_r() minden e és szerkezetrOl részletes informéciét szolgaltat, amit csak talil, beleénve az objektumo~ kat & a tmb6ket is. Ha nagyobb méret vagy bonyolultabb programot irunk, v ngleg nagyon fogiuk szeretni ezt a fgavényt. t szeretnénk A7.4, példaprogramban a $karakterek témb réviditett valtozatat vizsgaliuk meg aprint_r() figgvénnyel. <!DOCTYPE html PUBLIC *-//W3C/DED XHTML 1.0 Strict//EN" http: //wew.w3.org/TR/xhtml1/DTD/xhtmlL-strict dtd" + <html> <head> : : <title>7.4. példaprogram - Tomb vizsgdlata ts a print_r() filggvénnyel 7: 8: 9:
10: <2php li: Skarakterek = array ( las array ( a3 “nev" => "Jénos", Ads ‘foglalkozas* => "szuperhds*. As: Ye 16: array ( ane "nev" => ‘Szilvia’. aes “foglalkezas" => “szuperhés". 120 IL nész * A PHP nyely r( $karakterek )7 kezét frja ki: => Array 1 => Jénos alkozas] => szuperh6s > Array [nev] => Szilvia [foglalkezas] => szuperhés
+ A Skarakterek tmb roviditett vikozatat adjuk ta print_r() fiiggvénynek. E 43. sor kbz6tti megiegyzésblokkot 4 program kimenetét, s: a sondréseket és sz6kbz0ket haaprint_xr() hivisit
 k
Print ‘
 x Sia

print_r ( Skarakterek }; ‘te
print "";
,

A Sharmadik tmb az $elso és a $masodik tmbéik elemeinek misolat
A foreach ciklus ennek a tmbnek azelemeit va", "b™, "co", 1, 2, 3) irja ki

a béingészObe. Az egyes elemeket a 
(sortrés) valasztja el e; |. Ne feled- jk: az array_merge() figgvénynek dtadott tmbék maguk nem viltoznak meg, Ha két tombnek azonos karakterlanccal indexelt elemei va a létrej6tt tombben az els6 témb elemeit a masodik tomb azonos indexd elemei felilir Egyszerre tab elem hozzéadésa egy timbhaz Azarray_push() fiiggvény egy tombot és tetszGleges szmi tovabbi paramétent fo- gad. A megadott énékek a tmbbe kerilnek. Figyeljik meg, hogy az ar flggvénnyel ellentétben az array_push() megvaltoztatja els6 paraméterének énékét, E filggvény visszatérési énéke a tombben lév6 elemek szima (miutin az elemeket hoz ziadta). Hozzunk létre egy tombét, majd adjunk hozz4 néhany elemet $elso = array( "a", "pt, "C” }i 5 Selemszam = array_push{ Selso, t, 2, 3): Print “Osszesen $elemszam elem van az \$elso tombben

"; foreach( S$elso as Sertek ) { print *Sertek
": ) Print **; print ‘Az \Segy_tomb vAltozéban most ' . count ( we Segy_tomb } . ‘elem vanebr /> A program kimenetét a 7.4. abrin lathatjuk. Azarray_shift() akkor lehet hasznos, amikor egy sor elemein kell valamilyen tevé-—f kenységet végezni, amiga sor ki nem iiril. Tomb részének kinyerése az array_slice() fliggvény segitségével ‘Az array_slice) fiiggvény egy tomb egy darabjit adja vissza. A fllgevény egy tombix, egy kezd6poziciot (,eltolist”, vagyis a szelet els6 elemének tmbbell indexén) és egy (elhagyhat6) hossz, paramétert vie. Ha ez utobbit elhagyiuk, a figavény feltcrele: a kezdéporiciGl a tomb végéig tart6 szeletet szeretnénk megkapni. AZ array. nem valtaztatja meg a paraméterként tadott tomb vissza, amelyben a hive Altal kért elemek vannak.

You might also like