PHP H YPERTEXT P REPROCESSOR Özcan ÇAĞIRICI CSE341 Programming Languages Özcan ÇAĞIRICI
İ ÇERIK PHP nedir ? Çalışma Prensibi PHP’nin Tarihi Neden PHP ? Yazım Kuralları Tipler Değişkenler Sabitler Kontrol Yapıları Özcan ÇAĞIRICI
İ ÇERIK Fonksiyonlar Diziler Stringler Class ve Object Formlar PHP ve mySQL Çerezler İleri Düzey PHP konuları Sonuçlar Özcan ÇAĞIRICI
PHP N EDIR ? PHP: Hypertext Processor (or Personal Home Page) PHP, Web tabanlı yazılımları geliştirmek için tasarlanmış bir programlama dilidir. Kaynak kodu ücretsiz elde edilebilir. Çalışma mantığı sunucu taraflıdır. Birçok işletim sistemi üzerinde çalışabilir: Linux, Windows, MacOSX, Solaris, Unix, Netware Veri tabanına erişim (özellikle mysql) Özcan ÇAĞIRICI
Ç ALıŞMA P RENSIBI Özcan ÇAĞIRICI
Ç ALıŞMA P RENSIBI PHP uzantılı dosyalarda PHP derleyicilerinin çağrılması gerekir. PHP derleyici, kendine ulaşan metin dosyasının içinde arasındaki PHP kodlarını ise seçip alır ve istenen/gereği neyse onu yapar. Bu ayıraçların içinde kalan kodlar, bizim yapılmasını istediğimiz işlemin komutlarıdır. Özcan ÇAĞIRICI
PHP’ NIN T ARIHI PHP, 1993 yılında Rasmus Lerdorf tarafından P ersonal H ome P ages adıyla yazılmıştır.1993 Kaynak kodları 1995 senesi içinde yayınlamıştır. PHP şu an için son sürüm olup, 2009 yılının ilk çeyreğinde PHP sürümünün yayınlanması beklenmektedir. 2007’nin Temmuz ayından itibaren dünya çapında 21 milyondan daha fazla alanda kullanılmaktadır. Özcan ÇAĞIRICI
PHP’ NIN T ARIHI Özcan ÇAĞIRICI
N EDEN PHP ? Ücretsizdir. Kaynak kodu açıktır. Birçok işletim sistemi ve web sunucusu üzerinde çalışabilir. Web sunucusu üzerinde az hafıza kullanır. Yazım kuralları, öğrenimi kolaydır (C ve Perl dillerine benzer). Eklentileri ve yardımcı kütüphaneleri ücretsizdir. Özcan ÇAĞIRICI
N EDEN PHP ? Dinamik olarak oluşan grafikler yaratılabilir. Tartışma forumları oluşturulabilir. XML verilerini yorumlanabilir ve oluşturulabilir. İçerik yönetimi yapılabilir. Site içi veya dışı arama motorları yaratılabilir. Özcan ÇAĞIRICI
Y AZıM K URALLARı PHP’nin yazım kuralları günümüzde çok popüler olan C, JAVA ve PERL gibi programlama dillerine benzerdir. PHP kodları kendine özel etiketler sayesinde html komutlarının içine gömülür. ve ya Php komutları “;” (noktalı virgül) işaretiyle sonlandırılır. echo,print ve printf : Ekrana yazdırma komutudur. // : Tek satırlık açıklamalar için kullanılır /* ve */ : Birden çok açıklama satırlarında kullanılır. Yorumlayıcı işaretler arasındaki yazıları ve PHP komutlarını dikkate almaz. Özcan ÇAĞIRICI
İ LK PHP ÖRNEĞI My First PHP Page <?php echo “ Hello World! "; ?> Özcan ÇAĞIRICI
T IPLER PHP’de veri tipler C programalama diline benzerdir. Scalar tipler Boolean Integer Float String Compound tipler Array Object Diğer Tipler Resource, interface …. Özcan ÇAĞIRICI
DEĞİŞKENLER PHP’de değişkenler önüne $ simgesi konularak tanımlanır. PHP de değişkenlerin tipleri dinamiktir. PHP değişkenleri büyük ve küçük harf duyarlıdır. Değişkenler harf ve underscore ile başlamak zorundadır. Değişkenlere değer atamak için "=" işareti kullanılır. Özcan ÇAĞIRICI
DEĞİŞKENLER Global ve Static Değişkenler Bir fonksiyon sadece içerisinde tanımlanan değişkenlerle çalışabilir. Fonksiyon geriye döndürdükten sonra içindeki tanımlanmış değişkenler ve bunların değerleri yok olurlar. <? global $a; $a = 20; hesapla(); print ($a); function hesapla() { $a = $a * 1000; //$a global olmasaydı buradan değerine ulaşamazdık return $a; } ?> Output Özcan ÇAĞIRICI
S ABITLER Sabitler program boyunca değişmeyen değerlerdir. Bir sabit tanımlandıktan sonra atanana ilk değerini korur, yeni bir değer ataması yapılamaz. Sabitler define() komutu ile tanımlanırlar. Sabitlerin önünde $ bulunmaz. Kullanılış biçimi: define (sabit_adi, deger) <? define (pi_sayisi, 3.14); define (dis_acilar, 360); ?> Özcan ÇAĞIRICI
K ONTROL Y APıLARı if, while, for ve switch yapıları C programlama dilindeki gibidir. Örnek : İki sayıdan büyük olanı bulan bir program <? $sayi1 = 5; $sayi2 = 15; if ($sayi1 > $sayi2) { print ("İlk sayı büyük $sayi1"); } else if ($sayi1 < $sayi2) { print ("İkinci sayı büyük $sayi2"); } else { print ("Sayılar eşit $sayi1,$sayi2"); } ?> Özcan ÇAĞIRICI
K ONTROL Y APıLARı while döngü yapısı Örnek : 1'den 10'a kadar olan sayıların toplamını bulan bir program. <? $sayac = 0; while ($sayac <= 10) { $sayac ++; $toplam = $toplam + $sayac; } print ($toplam); ?> Özcan ÇAĞIRICI
K ONTROL Y APıLARı for döngü yapısı Örnek : 0'dan 10'a kadar olan sayıların toplamını bulan bir program. <? for ($sayac = 0; $sayac <= 10; $sayac ++) { $toplam = $toplam + $sayac; } print ($toplam); ?> Özcan ÇAĞIRICI
K ONTROL Y APıLARı PHP ekstra döngü yapısı olan foreach kolaylık sağlar. $people [0]=‘Ali'; $people [1]=‘Veli'; foreach ($people as $person) echo "$person bir örnektir”; Output Ali bir örnektir. Veli bir örnektir. Özcan ÇAĞIRICI
F ONKSIYONLAR PHP’de kendi fonksiyonlarınızı tanımlayabilirsiniz. Değişkenler gibi büyük küçük harf duyarlıdır. PHP fonksiyonları henüz thread programlamayı desteklememektedir. Fonksiyon overloading desteklemez. Tanımlaması: function hesapla($deger) { //PHP kodu } Kullanımı $benim_degerim = 5; hesapla($ benim_degerim ); Özcan ÇAĞIRICI
F ONKSIYONLAR Fonksiyonlar istediğin tipte geriye bir değer döndürebilir. Fonksiyona parametreleri pass by value ve pass by reference olarak gönderebilirsiniz. Fonksiyonlara parametreler varsayılan olarak pass by value şeklinde gider. Özcan ÇAĞIRICI
F ONKSIYONLAR Pass by value <?php function exampleByValue($string) { $string = ‘by value.’; } $variable = ‘variable’; exampleByValue($variable); echo $ variable; ?> Output: variable Pass by refence Parametre başına & işareti konularak referansı gönderilir. <?php function exampleByValue(&$string) { $string = ‘by refence.’; } $variable = ‘variable’; exampleByValue($variable); echo $ variable; ?> Output: by refence Özcan ÇAĞIRICI
D IZILER PHP dizileri string ve numaralar ile indekslenebilir. Dizi boyutu statik değildir. Dizi yapısını vector, hashtable, stack gibi kullanabilirsiniz. Özcan ÇAĞIRICI
D IZILER Yazım Kuralı <?php $arr = array("foo" => "bar", 12 => true); echo $arr["foo"]; echo $arr[12]; ?> 2 Boyutlu Diziler <?php $arr = array("somearray" => array(6 => 5, 13 => 9, "a" =>42)); echo $arr["somearray"][6]; // 5 echo $arr["somearray"][13]; // 9 echo $arr["somearray"]["a"]; // 42 ?> Özcan ÇAĞIRICI
S TRINGLER PHP regular expression destekler. Bir çok string fonksiyonu tanımlıdır. strcmp(str1, str2) İki stringi kıyaslar. (aynı ise 0 döndürür) strlen(str) Stringin uzunluğunu döndürür. Özcan ÇAĞIRICI
C LASS VE O BJECT Fonksiyonlar ve değişkenlerden oluşan bir class yapısı tanımlayabilirsiniz. PHP 5 ve üzeri sürümlerde private ve protected değişken ve fonksiyonları tanımlanmıştır. constructor ismi class ismi ile aynı olmak zorundadır. <?php class Daire { var $yaricap; function cevre() { return $this->yaricap * 2 * PI; } function alan() { return $this->yaricap * yaricap * PI; } }; ?> Özcan ÇAĞIRICI
C LASS VE O BJECT Object yaratmak için new keyword kullanılır. <?php $myDaire = new Daire; echo $myDaire->alan(); echo $myDaire->cevre(); ?> Özcan ÇAĞIRICI
C LASS VE O BJECT Ayrıca PHP 5 ile interface ve multiple inheritance desteklenmiştir. extend keyword kullanılarak classlardan inheritance yapılabilir. Özcan ÇAĞIRICI
F ORMLAR GET : Client(İstemci) tarafından gönderilen bilgiler browser adres satırında görüntülenir. Adınız : Soyadınız :....../formyolla.php?ad=“Cuneyt"&soyad=“Ay"&.... Özcan ÇAĞIRICI
F ORMLAR POST : Client(İstemci) tarafından gönderilen bilgiler browser adres satırında görüntülenmeden yollanır. Adınız : Soyadınız : formyolla.php Output Cuneyt Özcan ÇAĞIRICI
PHP VE MY SQL mysql_connect komutuyla veritabanı sunucusuna IP, kullanıcı adı ve şifre verilerek bağlantı sağlanır. Daha sonra mysql_select_db komutuyla dosyadaki tüm mysql işlemlerinde kullanılacak olan veritabanı tercihi belirtilmiş olur. mysql_query fonksiyonu kullanılarak veritabanına sorgu gönderilir. Özcan ÇAĞIRICI
PHP VE MY SQL mysql_numrows sonuç tablosundaki satır sayısını öğrenmek için kullanılır. mysql_fetch_array sonuçları dizi değişkeni olarak alır. PHP dosyalarında tüm veri tabanı işlemlerinde önce veri tabanı sunucusuyla bağlantı kurulmalıdır. Özcan ÇAĞIRICI
PHP VE MY SQL mySQL’e bağlanma mysql_connect(“localhost”,”root”,”sifre”); mysql_select_db(“veritabani”); mySQL’e sorgu gönderme $isimler = ”SELECT * FROM ogrenciler”; $sonuc = mysql_query($isimler); while($ogrenci = mysql_fetch_array( $sonuc )){ echo $ ogrenci [“isim”]; echo $ ogrenci [“numara”]; } Özcan ÇAĞIRICI
PHP VE MY SQL mySQL’e Kayıt Eklemek $sql = “INSERT INTO ogrenciler (NUMARA, BOLUM, SINIF, ADI, SOYADI) values ('$NOM', '$BOLUM', '$SINIF', '$ADI', '$SOYADI',)"; $sonuc= mysql_query($sql); mySQL’de Kayıt Silmek ve Update $sql=“DELETE FROM ogrenciler WHERE NUMARA='$NUMARA‘ “;$sonuc= mysql_query($sql); $sql = “UPDATE ogrenciler SET SINIF = '$SINIF‘ WHERE NUMARA = $ NUMARA "; $sonuc= mysql_query($sql); Özcan ÇAĞIRICI
Ç EREZLER PHP aracılığıyla çerez bırakabilir ve bu çerezleri okuyabilirsiniz. setcookie() fonksiyonu çerez bırakmak için görev yapar. Çerezler betiğinizin herhangi bir çıktısından önce gönderilmelidir. Çerezler bir kere atandı mı, artık $_COOKIE veya $HTTP_COOKIE_VARS dizileri ile sonraki sayfa yüklemesinde erişilebilir olacaktır. Özcan ÇAĞIRICI
Ç EREZLER <?php $firstvisit = !isset($_COOKIE['beenherebefore']); if ($firstvisit) setcookie('beenherebefore','yes'); ?> <?php if ($firstvisit) echo "Hello"; else echo "Welcome back"; ?> Özcan ÇAĞIRICI
İ LERI D ÜZEY PHP KONULARı Fonksiyon Değişkeni Fonksiyon ismini değişken olarak yapabilirsiniz. <?php function fonkA() { echo " fonkA()\n"; } function fonkB($arg = '') { echo " fonkB()n";} $degisken = ‘fonkA'; $ degisken (); // fonkA() çağrılır. $ degisken = 'bar'; $ degisken ('test'); // fonkB() çağrılır. ?> Özcan ÇAĞIRICI
İ LERI D ÜZEY PHP KONULARı Fonksiyondan referans geri döndürme Referans geri döndürmek için fonksiyon tanımlamasında ve atama işleminde & operatoru kullanılmalıdır. <?php function &returns_reference() { return $someref; } $newref =& returns_reference(); ?> Özcan ÇAĞIRICI
İ LERI D ÜZEY PHP KONULARı Fonksiyon içinde fonksiyon tanımlama fonkB() direk çağırılamaz. fonkA() çağrıldıktan sonra fonkB()’ye erişim imkan olacaktır. <?php function fonkA() { function fonkB() { ……. } fonkA(); fonkB(); ?> Özcan ÇAĞIRICI
S ONUÇLAR JAVA ve C programlama dillerine benzerliğinden dolayı öğrenmesi kolaydır. HTTP session ve CGI parametreleri tanımlamaları kolaydır. Dizi yapısı pratik ve dinamiktir. PHP ile ilgili birçok kaynak Internet üzerinde erişilebilir durumdadır. Özcan ÇAĞIRICI
S ONUÇLAR Büyük projelerde tip güvenliği sorun çıkartabilir. Performans ve profesyonel destek için ücretlidir. Windows işletim sistemi üzerinde güvenlik açıkları oluşturabilmektedir. Hata ayıklama cehennem gibidir. Özcan ÇAĞIRICI