Php Ders Notu 2

download Php Ders Notu 2

of 41

Transcript of Php Ders Notu 2

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

SMET AKTAR ANADOLU TEKNK LSES BLM TEKNOLOJLER ALANI WEB PROGRAMCILII DALI

nternet Programcl PHP Ders Notlar - II

2009nternet Programcl - PHP Ders Notlar II 1

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

PHP ile Nesnelerin Kullanm PHP 5'te Nesnelere GiriProfesyonelce kod oluturmak iin OOP* mantna dayanan programlar oluturmak iin nesnelerden yararlanmamz gerekir. Bir ok web programcs kendini profesyonel addettii halde HTML kodlar ierisine dank bir ekilde kod yazmaktadr. Byle olunca da oluturulan programlardan hz beklemememiz gerekir. PHP 4'te OOP mant iin nesneler olmakla beraber, pek gelimi argmanlar olduu sylenemezdi. PHP 5 le gelen en byk yenilik nesnelerde grlmektedir. PHP 5'te oluturulacak nesneler JAVA tabanna dayandrlarak, program mant gelitirilmitir. Nesne ynelimli (Object-Oriented) programlama icat edildiinde geleneksel programlamaya aina olanlar nce tereddt ettiler; sonra bunun ne harika bir teknik olduunu grdler ve nesnelerden vazgeemez oldular. Kabaca tanmlarsak nesne, kendi deikenleri ve icra edecei komutlardan oluan fonksiyonlar ile bir btndr. Nesneyi bir kere tanmladktan sonra istediimiz kadar rneini oluturabiliriz. Bir nesnenin yapaca iten, o nesnenin metodu diye sz ederiz. Bu adan bakarsanz programlarmzda nesneler sadece metotlar iin ie yarar. Bir nesne, aslnda bilgisayarn hafzasnda ayrlm bir alandan baka bir ey deildir. Nesne tabanl yazlm PHP kodunda sre u ekilde geliir: Dosyann okunmas, nesnelerin oluturulmas, nesnelerin eitli zelliklerinin deitirilmesi, nesnenin ekrana gnderilmesi, ilemin bitirilmesi, nesnenin yok edilmesi. Bu srete yer alan nesne oluturma ve nesnenin eitli zelliklerinin deitirilmesi admlar, tamamen bellekte gerekleen ilemlerdir. Nesne ynelimli yazlmlar, ihtiyalarmz karlamak zere birbiriyle etkileim iinde olan nitelikleri ve ilemleri olan bir nesneler kmesi olarak tasarlanr ve oluturulur. Nitelikler, nesneyle ilgili zellik veya deikenlerdir. lemler ise nesnenin kendini deitirmek veya haric bir etki salamak amacyla gerekletirebilecei metot, eylem veya fonksiyonlardr. Nesneler, snflar hlinde gruplanabilir. Snflar (class) tek tek birbirinden farkl olabilen, ama baz ortak noktalar olan bir nesneler kmesini temsil eder. Bir snf tm ayn ekilde davranan birbirinin ayn ilemlere ve ayn eyleri temsil eden birbirinin ayn niteliklere sahip nesneler ierir. Ancak bu niteliklerin deerleri, nesneden nesneye deiebilir. Bir web projesi, hyperlink (kpr) ieren sayfalardan karmak uygulamalara doru giden bir evrim izler. letiim kutular, pencereler veya dinamik oluturulmu HTML sayfalar yoluyla temsil edilebilen karmak uygulamalar, gelitirme metodolojisi zerinde ayrntl bir ekilde dnlmeyi gerektirir. Nesne ynelimli yaklam ise size projelerinizdeki karmaklkla baa kabilme, kodlarn yeniden kullanlabilirliini artrmanternet Programcl - PHP Ders Notlar II 2

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

ve bylece kontrol maliyetini en aza indirebilme imknn sunar. Nesne kullanmann avantaj nedir? Bir proje tasarlayalm kafamzda. Bu projemizde 4 adet buton, 12 adet metin kutusu olsun. Byle bir projeyi nesne kullanmadan yapmamz durumunda buton oluturmak iin ayn kodlar sadece birka deiiklik dnda 4 kez, metin kutusu oluturmak iin ise 12 kere yazmamz gerekirdi. Bu da hem kodu uzatr, anlalmasn zorlatrr, hem de denetimi zorlatrr. Halbuki nesne olutursaydk bu kodlar 1 defa yazp her yeni nesne iin birka deiiklik yapacaktk. rnein birinin rengi iin nesneye ait renk deikenine 4 (mesela krmz), dierininkine 1 (mesela mavi) atamak yeterli olacakt. Tabi Php iin dnrsek buton ve metin kutusu zaten HTML form bileenleri olarak var. Ve bunlarda bir nesne. imdi bu nesnelerin olmadklarn sizin her seferinde bu nesneler iin kodlar yazdnz dnn. Bu i olduka zahmetli olurdu! Bu zaten var olduu iin nesneyi baka amalar iin kullanacaz. rnein veritaban ilemleri iin. rnein bir proje iinde birbiriyle ayn zellikleri fakat farkl deerleri tamas gereken durumlar iin. rnein; Bir e-mail sayfas yaptnz. Mail nesnesi oluturabiliriz. Bu nesne iin; Maili gnderenin ad, mail adresi, Alcnn ad, mail adresi iin deikenler, adresleri denetlemek, maili gndermek, maili veritabanna kaydetmek ve hatta adresi adres defterine kaydetmek iin birer fonksiyon hazrlayabiliriz. Bylece her mail ile ilgili ilemler iin tekrar takrar kod yazmak yerine bu nesnemizi kullanabiliriz. Baka bir rnek; Veritabanna balanmak ve zerinde baz ilemleri yapmak iin kullanabileceimiz bir nesne tasarlayabiliriz. Bu nesne iinde balanacamz veritabannn adresi (localhost vb), kullanc ad, ifresi, veritaban tr (mysql, postgreSql, MsSql, Access vb..), sql (sql kodu) deikenleri; balan, balanty kapat, sorgula, listele gibi fonksiyonlar olabilir. Byle bir nesne ile iimiz baz noktalarda ok kolay olurdu. Nesne programlama ve kullanma bata skc gelebilir. Ama bu mant iyi kavrayan bir kiinin bundan vazgemesi artk kolay deildir. Snf ve Nesne Tanmlama Her nesne aslnda bir trn rneidir. Nesneler, trlerin zelliklerinin deitirilmesinden oluur. Trler, sadece nesnelerin genel zelliklerinden bahseder. Nesneler, trden alnan birer rnektir, genel trn zelliklerini tamakla birlikte baz eylerde farkllklar gsterebilirler. Tablo trnden bir rnek nesne hazrlandnda zemin rengi, satr-stun saylar, balk ve aklama bilgileri farkl olabilir. PHP de en kk snf tanm, aadaki gibidir:

nternet Programcl - PHP Ders Notlar II

3

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

class tablo1 { -----} Kullanl olabilmeleri iin snflarn niteliklere ve ilemlere ihtiyac vardr. Var anahtar szcn kullanarak bir snf tanm iinde deikenler tanmlanabilir. Aadaki kodlarda degisken1, degisken2 adnda iki nitelii olan, tablo1 isminde bir snf oluturulmaktadr. class tablo1 { var $degisken1; var $degisken2; } Aadaki yapy incelediimizde; nesne ierisinde kullanacamz deikenler var deyimiyle tanmlanrlar. Bu deikenlere nesne ierisinden deer atanabilir. Ayn ekilde program ierisinden de deer atanabilir. levler function deyimi ile tanmlanrlar ve yapmalar gereken ilemler { } arasnda yazlr. class nesneadi { var $degisken1; var $degisken2; function islev1() { kodlar } function islev2($param1,$param2) { kodlar } } rnek) kt: Sayn Dursun AKIR sitemize hogeldiniz. Kullanc Ad : dursun_cakir Giri Zaman : 29.03.2006 15:13 Yetki Tr : Ynetici Program ierisinde dikkatinizi ekebilecek bir deyim var. $this deyimi iinde bulunduumuz nesneyi iaret eder. Bu deyimi nesne ierisinde yine ayn nesneye ait bir zellie ve ileve ulamak (deer atamak veya deerini almak) istediimizde kullanrz. Bu kodu incelediinizde bir nesnenin nasl oluturulduunu hemen hemen anlams nzdr. Program kodlarn aklayacak olursak: class deyimiyle bir nesne yazmak istediimizi belirtiyoruz. Bu nesnemize isim olarak uye adn veriyoruz ve { ile nesnemizin zelliklerini (deikenler) ve metodlarn (ilevfonksiyon) yazmaya balyoruz. Nesnemizin zelliklerini var deyimiyle tanmlamaya balyoruz. $adi, $takmaadi, $girissaati, $giristarihi, $yetki olmak zere be adet zellik ve ad($isim), takmaad($nick), giriszaman($tarih, $saat), yetki($yetkituru), yetkiyaz() olmak zere be adet metod tanmladk. Metodlarn fonksiyon (ilev) olduklarna deinmitik. Buradaki yaplarna baktmzda daha nce anlattmz fonksiyon konusunda grdmz yapnn ayn olduunu gryoruz. Nesneyi } ile bitiriyoruz. Bylece nesnemiz hazrlanm oldu. imdi bu nesneyi nasl kullanacamz grelim. Bir nesneyi kullanabilmeniz iin o nesneyi ncelikle oluturmak (tabiri caizse yaratmak) gereklidir. Yani nesneyi hafzaya almak gerekir. Bu ilemi new komutuyla yaparz. $nesne = new nesneadi; eklinde yazarak $nesne deikenini nesneadi ile belirttiimiz nesne trnde hafzada oluturur. Artk biz $nesne deikenini kullanarak nesneadi ile belirttiimiz nesneye ulaabiliriz. Buradan karmamz gereken sonu; nesneler alt alanlar bir veri trdr. Dolaysyla bir nesneyi kullanabilmeniz iin o nesnenin tipinde olan bir deikene atamanz gerekmektedir. Bylece ayn nesneden farkl deiken isimlerinde birden fazla oluturabiliriz. Zatennternet Programcl - PHP Ders Notlar II 6

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

nesnenin amalarndan biri de budur. Bir nesnenin zelliklerine ve ilevlerine ulamak iin nesne deikeninden sonra (tire) ve > (byktr) iaretleri getirilir. Daha sonra ulalmak istenen deiken veya ilevin adn (banda $ olmadan) yazarz ($nesne->degisken1;). PHP4 ile PHP5 Arasndaki Fakllklar PHP4 ile PHP5 arasnda, nesneler konusunda baz fakllklar vardr. Bu fakllklar daha iyi kavrayabilmek iin PHP5 standartlarnda bir rnek verelim:

Bu rnei incelediimizde fonksiyonlarn bana Public ifadesinin getirildiini gryoruz. Nesne deikeni olutururken Var ifadesi yerine Private ifadesi kullanlmtr. Bunlar PHP5 'in getirdii yeniliklerdir. Niteliklerimize vefonksiyonlarmza private, protected ve public eklinde eriim snr koyabiliyoruz:

nternet Programcl - PHP Ders Notlar II

7

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

Private : Nitelik yada fonksiyona(ilemlere) eriimin sadece snfn iinden yaplabilecei anlamna gelir. Kaltm vastasyla dahi ulalamaz. Protected : Nitelik veya fonksiyonlara(ilemlere) eriimin sadece snfn ierisinden yaplabileceini gsterir. Kaltm yoluyla altsnflardan ulalabilir. Public : PHP4 teki var gibi dnebilirsiniz. Belirtmediiniz srece varsaylan seenek public tir. Peki bunlar ne ie yararlar!? nitelik ve ilemlerin dolaysyla snfn gvenlik iinde almasn salarlar. PHP5 ile gelmi olan bir fonksiyon vardr. __construct() Nedir, ne ie yarar? __constuct bir yaplandrcdr. Nesne oluturulurken arlr ve belirten ilemi yaparlar (niteliklere balang deeri vermek gibi) .Geriye dnk uyumluluk erevesinde PHP __construct zel ilemcisini bulamazsa 'snfla ayn ad' tayan bir fonksiyon arar. Buda PHP4 te kullanlan yaplandrcdr. Private olan bir nitelie , fonksiyona(ileme) yapacamz bir mdahale snf ierisinde __set() kullanmadmz srece hata mesaj ile dnecektir : Nesnelerle Doum Tarihi Kontrol yas_kontrol.php

nternet Programcl - PHP Ders Notlar II

8

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

yas_kontrol_index.php

Bu rnekte nesnelerin arlma yntemi PHP4'teki gibidir. $nesne->tarih($tarih); PHP5'te nesne armak iin farkl bir yazm biimi kullanlmaktadr. $nesne::tarih($tarih); Karar Kontrol Mekanizmas

nternet Programcl - PHP Ders Notlar II

9

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

PHP4'te tm olaslklar mantksal denetlemelerle gerekletirilmektedir. PHP5'te karar kontrol mekanizmasnda yenilie gidilmitir. PHP gelitiricileri PHP ile Java dilini birbirine yaknlatrmak iin PHP erisinde Java'da kullanlan karar kontrol mekanizmasna benzeyen bir mekanizma katmlardr. try { // Karar kontrol } catch (Hata olgusu) { // Hata olduu taktirde yaplacak ilem } rnek)

PHP'de Otomatik altrlan Fonksiyon ( __construct ) PHP5 ile gelen bir zelliktir. Bu fonksiyon bir snf nesnesi altrldna otomatik olarak arlr.

nternet Programcl - PHP Ders Notlar II

10

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

Nesnelerde Kullanlan Metotlar: PHP5 ile nesnelerde kullanlmak zere deiik metotlar getirilmitir. Bu metotlar programclara nesne tabanl almada kolaylklar salamaktadr. --------------------------------------------------------------------------------------------------------__destruct Bu metot bir nesnede en son ilemin yaplaca fonksiyon olarak grev yapar. Mesela database balants yaptnz bir nesnede , ilemlerinizi bitirdiinizde veritabanyla olan tm balantnz kesecek olan komutlar bu fonksiyon ierisine yerletirebilirsiniz. Yalnz bu fonksiyonun otomatik olarak alabilmesi iin nesnenizi ldren unset komutunu kullanmanz gerekir. rnek)

nternet Programcl - PHP Ders Notlar II

11

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

--------------------------------------------------------------------------------------------------------__call Bu metot , nesne ierisinde olmayan yanl isimdeki bir fonksiyon arldnda otomatik olarak devreye girer. Hata kontrol mekanizmas olarak kullanlabilir. rnek)

--------------------------------------------------------------------------------------------------------nternet Programcl - PHP Ders Notlar II 12

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

__get() ve __set() Bu fonksiyonlar yardm ile kullanlan bir nesne ierisinde tanml olmayan bir deikene metod deer atamada hatalar engellenebilir. Bir Class'n ierisinde neler olduunu bilmeksizin yanl bir metod arldnda PHP4'te tm kod ktphanesi hata verir. PHP5 ile gelen bu fonksiyonlar yardmyla , hatal bir metod arldnda sistemde tanmlanan fonksiyonlar devreye girerek sistem entegrasyonunda btnlk salanm olur. rnek)

Yukardaki rnekte nesnemizi arp i adnda metodu ardmzda __get fonksiyonu otomatik olarak devreye girmektedir. kinci nesne armada ise fon adndaki metoda deer gnderildiinde bu sefer __set fonksiyonu otomatik olarak devreye girmektedir. --------------------------------------------------------------------------------------------------------__toString() Echo veya Print fonksiyonlar ile kullanlan bir fonksiyondur. Echo veya Print ile kullanlmad zaman tek bana bir anlam ifade etmez. Echo veya Print ile kullanld an _toString() metodu snf iinden arlr. rnek)nternet Programcl - PHP Ders Notlar II 13

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

Nesneyi armak iin parantez ierisinde isim girip direk nesneyi yklediimiz deiken arldnda __toString metodu devreye girip, fonksiyonda tanml komutlar icra edilir. kt: smet Aktar --------------------------------------------------------------------------------------------------------__clone() Bir nesnenin btn zelliklerinin aynen kopyalanmasn salar. Ayrca nesne ierisinde tanml deikenlerde ykl olan deerlere dardan veri gnderebilme olanan bizlere sunmaktadr. Clone anahtar szc kullanlarak bir nesneye ait kopya yaratlabilir. Bunun iin snf ierisinde __clone() metodu kullanlr. __clone() metodu tek bana arlmaz. Snfn nesnelerini Clone anahtar szcn kullanarak klonlamak istenildiinde __clone() metodu kendiliinden devreye girmektedir. rnek1)

nternet Programcl - PHP Ders Notlar II

14

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

kt: Bu yaz dosyann iindedir. Bu yaz dosyann iindedir. rnek2)

nternet Programcl - PHP Ders Notlar II

15

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

Nesneyi arp nesne ierisinde yer alan verileri print_r komutu ile dizi deikeni olarak listelediimizde aadaki kt oluacaktr:

Matematik Fonksiyonlar Saylar yuvarlayan fonksiyonlar: floor() , ceil() , round() echo floor(12.456) echo ceil(12.456) echo round(12.656) Noktadan sonrasn dikkate almaz. Sonu:12 Bir ste yuvarlar. Sonu:13 Noktadan sonraki say 5 ve st ise tam sayya evirir, deilse bir alt sayya evirir. Sonu:13

Trigonometri fonksiyonlar: cos() , sin () , tan() , acos() , asin() , atan() echo cos(30) Sonu: 0.154251449888

Dntrc fonksiyonlar: bindec() , decbin() , dechex() ,hexdec() Rastgele say reten fonksiyonlar: mt_srand() , mt_rand() , srand() , rand() mt_srand((double)microtime()*1000000); echo mt_rand(); srand((double)microtime()*1000000); echo rand(); Sonu: 403106591 Sonu: 30022

nternet Programcl - PHP Ders Notlar II

16

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

sqrt() : Karekk pow() : Bir saynn st abs() : Mutlak deer pi() : Pi says max() : En byk say

exp() : Exporansiyel log() : logaritma log10() : 10 tabannda logaritma min() : En kk say

HTTP Protokolleri ve Cookie(erez) 'lerCookie(erez) 'ler Cookie'ler bir web sayfasna gelen kullancy, siteyi bir daha ziyaret etmesi halinde tanyabilmesi iin otomatik olarak web sayfalarndan ziyaretinin bilgisayarna atlan metin dosyalardr. Bu metin dosylar Win95/98/Me sistemlerinde C:\Windows\Cokies , WinNT/2000/ XP/2003 sistemlerinde C:\Document and Settings\Kullanici\Cookies klasrlerinde tutulur. Cookie Oluturmak ve Okumak Cookie oluturmak iin setcookie komutu kullanlr. Oluturulan cookie'lere $_COOKE dizi deikeni vastasyla ulaabiliriz. setcookie(''isim'' , ''deer'' [ , zaman , ''dizin''] ) Cookie'nin mrn belirleyen zaman parametresi time() fonksiyonu ile saniye cinsinden belirlenir. Time() bulunduumuz zaman saniye cinsine evirir. r)

Yukardaki komut satr ilk olarak altrldnda ekrana herhangi bir yaz gelmez. Sayfa gncellendiinde karmza ismet aktar yazs kar. r) Aadaki rnekte oluturulan Cookie'nin mr 10 dak. Olarak ayarlanmtr. Bunun iin time() fonksiyonuna 600 eklenir. ( 600 sn = 10 dak. )nternet Programcl - PHP Ders Notlar II 17

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

rnein Cookie'nin mrn 1 yl olarak belirlemek istiyorsak: setcookie(''okul'' , ''ismet aktar'' , time() + 3600*24*365); Oluturulan Cookie'ye drdnc parametre olarak dizin eklenebilir. rnein Cookie'nin tm web sayfasnda kullanlmasn istiyorsak: setcookie(''okul'' , ''ismet aktar'' , time() + 3600 , ''/''); Eer oluturacamz Cookie'yi farkl bir dizinde kullanmak istiyorsak: setcookie(''okul'' , ''ismet aktar'' , time() + 3600 , ''/farkl_dizin''); Bir Cookie'yi simek istersek mrn ksa tutarak silebiliriz: setcookie(''okul'' , ''ismet aktar'' , time() + 1 ); Cookie'ler Genelde Nerelerde Kullanlr ? Cookie'ler bata anketler olmak zere '' ankette oy kullanana bir ziyaretcinin birden fazla oy kullanmasn engellemek amacyla'' , sayalarda , yelik sistemlerinde , bir kez almasn istediimiz reklam ya da popup pencerelerinde kullanlr. Ancak unutmamz gereken bir ey var, o da kullanc eer isterse Cookie'leri silebilir ya da devre d brakabilir. nbellei Silmek Oluturduumuz web sayfasn bir kullanc ziyaret ettiinde, taraycnn zelliinden kaynaklanarak; web sayfalar bir daha ziyaret edildiinde sayfann daha hzl alabilmesi iin web sayfasnn ierii kullancnn hardiskinde kaydolur. Maksimum gvenlik gerektiren web sayfalarnda ''sanal al-veri , bankaclk siteleri v.b'' ieriin kayt edilmesinin engellenmesi gereklidir. Bu ilem PHP'nin http protokolleri ile yaplabilir.nternet Programcl - PHP Ders Notlar II 18

Biliim Teknolojileri Alan Web Programcl Dal

Durhan GABRALI - 2009

Yukardaki komut satrlarn hafzaya alnmasn istemediiniz dosyalarn bana yazarsanz web sayfanzn ierii kaydolmayacaktr. PHP'de HTTP protokol ile ynlendirme PHP'de header fonksiyonunu kullanarak ynlendirme ilemleri yapabiliriz. Header fonksiyonu; en basit anlamda sunucu ( Web Server - r. : Apache ) ile istemci ( Browser - r. : Explorer ) arasndaki HTTP Protokolu zerinde kontrol salayan bir komuttur. Aadaki verilen kod satrlar , php 'nin header fonksiyonu ile kullancya dosya.zip adnda bir dosya gnderme iini yapmaktadr. Sonra header fonksiyonu iinde yer alan bilgilereden Content-type: application/zip Browser'nzn ekranna kacak bilginin tipini belirleyerek, browser'n ona gre davranmas gerektiini syler.

imdi de kullancy baka bir sayfaya ynlendirme ilemine bakalm:

PHP web server bulunanlarda, ynlendirme kodun server tarafndan derlenmesinden sonra alr. Fakat burada nemli olan husus bu kodu yazarken;