Yenişehir Wiki
Advertisement
Yenişehir Wiki
80.773
pages


PHP : Hypertext Preprocessor (Türkçe: Üstünyazı Önişlemcisi [1]), genelağ için yaratılmış, sunucu taraflı, çok geniş kullanımlı, genel amaçlı, HTML içerisine gömülebilen betik ve programalama dilidir[1]. PHP, ilk kez Rasmus Lerdorf tarafından, web üzerinden sayfasına ziyaret edenleri izlemek amacıyla bir dizi Perl betiği kullanılarak geliştirilmişti. İnsanlar kısa zamanda bununla ilgilenmeye ve bu konuyla ilgili sorular sormaya başladıklarında, Rasmus kararını verdi ve bir betik motoru oluşturdu. Ayrıca formlara da destek verdi ve böylece PHP/F1'i biçimlendirmiş oldu. Adını duyurdukça bir grup yazılım geliştirmecinin dikkatini çekti ve böylece bir API oluşturuldu ve PHP3 ortaya çıktı. Daha sonraları yeniden ele alınması gerekti ve Zend motoru PHP4'ü yaratmış oldu. Artık PHP önünde pek engel bulunmuyordu, böylece PHP daha ünlenmeye başladı. Günümüzde PHP, bloglardan forumlara, portal sistemlerinden veri tabanlarına, yapay sinir ağlarından matematiksel sistemlere, sınıflardan fonksiyonlara her türlü işlevde kullanılır.

PHP Gelişimi[]

Anlamı
Kırmızı Eski sürüm, desteklenmiyor
Sarı Eski sürüm, hala destekleniyor
Yeşil Mevcut sürüm
Mavi Gelecek sürüm ya da BETA, ALFA sürüm
Ana Sürüm Ek Sürüm Yayın Tarhi Notlar
1 1.0.0 1995-06-08 "Personal Home Page Tools(Kişisel Anasayfa Araçları)". olarak anılıyordu ve kısaltımı "PHP" idi.
2 2.0.0 1997-11-01 Yaratıcısı ve geliştiricisi "en hızlı ve en sade araç" olarak, web sayfaları için geliştirdi.
3 3.0.0 1998-06-06 Sürüm kişisellikten, kurumsallığa geçti. Zeev Suraski ve Andi Gutmans tekrar basit dil bilgisini yazdı.
4 4.0.0 2000-05-22 Daha ileri seviye dil bilgisi eklendi/Zend Motoru denilen dil bilgisi denetleyicisi getirildi.
4.1.0 2001-12-10 'Süper globaller' tanıştırıldı. ($_GET, $_POST, $_SESSION, $_SERVER vb...)
4.2.0 2002-04-22 register_globals öntanımlı olarak engellendi.
4.3.0 2002-12-27 CLI tanıştırıldı,CGI ekleri yapıldı.
4.4.0 2005-07-11 phpize ve php-config betikleri için eklenmeler yapıldı.
4.4.8 2008-01-03 Çoğu güvenlik sorunları ve hatalar düzeltildi. Son kalıcı PHP 4 sürümü oldu. Gerekli ise, güvenlik güncellemeleri 2008-08-08 e kadar sürdü.>
4.4.9 2008-08-07 Daha fazla açık onarıldı. PHP 4 serileri için son sürüm oldu.
5 5.0.0 2004-07-13 Zend Motoru II ile yeni obje modelleri geliştirildi.
5.1.0 2005-11-24 Eklenen değişkenler ile performans artışı gözlemlendi.
5.2.0 2006-11-02 Filtreleme öntenımlı olarak iptal edildi.
5.2.11 2009-09-16 Hata ve güvenlik sorunları çözüldü.
5.2.12 2009-02-25 Güvenlik ve veri tabanı iletişimi güçlendirildi. 60 adet hata düzeltildi.
5.2.13 2010-07-22 Hatalar düzeltildi.
5.2.14 2010-12-17 Hatalar düzeltildi. PHP 5.2.x sürümleri geliştirilmesi durduruldu.
5.3.0 2009-06-30 Namespace desteği, Atlama kodları (goto ile limitlendi), Yerli PHP arşivlemesi (phar),Windows desteği arttırıldı, sqlite3 geliştirildi, fileinfo, mime_magic yerine daha iyi bir MIME desteği için getirildi, uluslararası olarak "ereg" kod yapısı iptal edildi.
5.3.1 2009-11-19 100'den fazla hata düzeltildi, bazı küçük sorunlar da düzeltildi.
5.3.2 2010-03-04 Çok geniş bir hata düzeltimi yapıldı.
5.3.3 2010-07-22 Başlıca hata ve güvenlik sorunları onarıldı.FPM
6 6.0.0 Şu an güncellenmedi, gelecek sürüm 'register_globals' iptal edildi, Unicode, 'magic_quotes' ve 'safe_mode' desteği geldi.

Avantajları[]

Rasmus Lerdorf PHP'nin mucidi.

  1. PHP hemen hemen her platformda çalışabiliyor. PHP aynı kod temelini kullandığı için, UNIX, Windows (95/98/NT/2000) ve Mac OS dahil olmak üzere 25 platformda derlenip kurulabilir. Kodlar aynı olduğundan script'ler platformdan bağımsız olarak çalışacaktır.
  2. PHP, uzantı alabilmektedir. Uygulamanın içerisinde yer alan çekirdek motor (Zend tarafında yazıldı), bir dizi asal kod modüllerinden ve kod uzantılarından oluşmaktadır. Bu nedenle programcılara PHP uzantıları yaratarak bazı özel işlemlerini yapabilmeleri için iki seçenek sunuluyor; ya uzantı modüllerini yazarak uygulanabilen bir derleme yapmak, ya da PHP'nin dinamik yükleme mekanizmasıyla yüklenebilecek uygulanabilir uzatmalar yaratmak.
  3. PHP pek çok HTTP server arayüzü barındırıyor. PHP Apache'ye, AOL server'a, Roxen ve THTTPD'ye doğrudan yüklenebiliyor. Alternatif olarak CGI modülü olarak da kullanılabilir.
  4. PHP pek çok veritabanı arayüzü bulunduruyor. PHP, MySQL, MS SQL, Oracle, Informix, PostgreSQL ve diğerleriyle doğrudan çalışabiliyor. Bunlar ikili sayı düzenindeki arayüzlerden oluşmaktadır ve bu çözümler için veritabanının desteklenmediği yerlerde ODBC desteği sağlıyor.
  5. Bir PHP kullanıcısı herhangi bir kütüphane için arayüz oluşturmakta zorluk çekmez. Pek çok kullanıcı bu yolu seçmiş, grafik rutinleri, PDF dosyaları, Flash Movie'leri, Cybercash cetvelleri, XML, IMAP, POP ve diğerleriyle ilgili modüller bulabilmiştir.
  6. PEAR, PHP'nin uzantısı ve Add-on deposudur. Pear, Perl için geliştirilen CPAN'e benzemektedir. Halen başlangıç aşamasında olmasına rağmen PEAR, PHP'nin kurulumuyla birlikte gelecek bir dizi PHP script'ini kullanıma sunmaktadır.
  7. PHP bir açık kod uygulamasıdır ve pek çok profesyonel kullanıcı için çok şey ifade etmektedir. Basitçe açıklamaya çalışırsak PHP kullanıcıyı, çalışmayan uygulamalar için üretici firmanın keyfini beklemekten, her yıl sistemini belli paralar ödeyerek güncelleme zorunluluğundan kurtarmaktadır.

Eksik yönleri neler Hata denetimi Cold Fusion ya da ASP uıygulamasındaki kadar etkili değil. IDE ve debugger uygulaması bulunmuyor. IDE'nin pek çok kullanıcı için fazla bir önemi yok. Ancak debugger Zend tarafından yakın gelecekte geliştirilecek. PHP ve diğer script dillerini ne zaman kullanacaksınız Eğer bir UNIX ya da Linux platformu üzerinde iş görüyorsanız, Perl ve PHP, her ikisi de çalışmalarınız için ideal. Her ikisi de başlangıç aşamasında script yazmayı kolaylaştırıyor. Windows platformundaysa ASP ve Cold Fusion egemenliği bulunuyor. Aslında buradaki tercih teknik olmasından çok politik sayılır. ASP ile IIS mühtemelen PHP ile IIS'den daha iyi. Ancak tamamen teknik bir altyapıda PHP, WindowsNT üzerinde, diğer platformlardaki performansına ulaşmakta.

Teknik Notlar[]

- PHP uygulamaları bağımsız çalışabilecek derleyici yapısıyla değil, uyarlayıcı yapısıyla çalışır.
- PHP yorumlayıcısı ilgili dosya içindeki betikleri çalıştırarak geriye döndürdüğü sonucu sunucuya tekrar gönderir.
- Sunucuya ulaştırılan sonuç İstemci (Client) tarafına HTML dosya olarak yollanır. - PHP ile Sunucu/İstemci mantığında web tabanlı uygulama geliştirilebildiği gibi, UNIX kabuk programlama ve GTK ile de GUI' ye sahip tek başına çalışabilen uygulamalar geliştirmek mümkündür.

Veri Tipleri[]

PHP veri tipleri içerir. PHP'deki kod yapısına göre her türlü veriyi sadece bir kez deklare etmek ile kodun her yerinde kullanabilirsiniz. Veri tipleri ana olarak 8 tanedir:

  1. Boolean: En basit türdür. Bir mantıksal ifadenin sonucu TRUE veya FALSE olan bir doğruluk değeridir. Örneğin 0, "FALSE", 0.0, "Elemansız Dize", "Boş", "NULL" FALSE(yanlış) verir.
  2. Integer (int): Tam sayılardır. - sonsuzluktan, + sonsuzluğa kadar olan her tam sayı yani ondalıksız sayı bir integerdir. Sayı oldukları için " ",' ',´ ´ içerisine konulmaları gerekmez. Örneğin -312, -1, 0, 4511, 2, 636626213 gibi...
  3. Float: Tüm Reel sayılar yani Gerçek Sayılar Float türüne mensuptur. - sonsuzluktan + sonsuzluğa kadar olan ondalık sayılar, rasyonel sayılar, irrasyonel sayıları içerir. Sayı oldukları için " ",' ', ´ ´ içine yazılmaları gerekmez. Örneğin -54233.3, -523.13125415, 0.0, 31.1, 4242.442, 2.222 gibidir.
  4. String (str): Tüm yazı cinslerini içerir. PHP'de string belirlerken mutlaka ama mutlaka " ", ' ', ´ ´ işaretlerinden herhangi birinin içine koymak gerekir. Örnek olarak "Merhaba", "Nasılsın?", 'PHP yazısıdır', ´Bu bir string´ gibidir.
  5. Array: Dizidir. Yani birden çok değer barındır. PHP'de değerleri belirtirken $ad ifadesini kullanırız. Buna göre $ad[1], $ad[2] gibi ifadeler olabilir.
  6. Object (obj): Nesnelerdir. Class yani sınıf yazarken nesne tabanlı kullanılır.
  7. Resource: Kaynak tipidir. Veri tabanından gelen bilgilerin değişken olmasından kaynaklı bu tip ile kaydedilir.
  8. NULL: Tanımsız, deklare edilmemiş, Yok, Belirsiz, Geçersiz ifadelerdir. Eğer bir değişken " ", ' ', ´ ´ ya da empty ise NULL değildir çünkü boş bir string olur. NULL ise hiç tanımlanmamış şeylerdir.

PHP Kod Yapısı[]

PHP Kod Yapısı Hakkında[]

PHP, HTML gömülü betik dilidir.

PHP'nin kod yapısı C Diline, Perl Diline ve Java Diline benzer. PHP, 21. yüzyılda ünlenmeye başlamış bir dildir. HTML gömülüdür, yani HTML kodları içerisinde kullanılabilir. Bunun için <?php açma etiketini ve  ?> kapama etiketini kullanır.

Açılış Etiketi[]

PHP dili ile kod yazmaya başlamak için onu belirtmek zorundasınız. Yoksa PHP derleyicileri PHP ile yazdığınızı anlamaz. Bunu:

<?php

?>

Yazarak yapabilirsiniz. <?php PHP ile yazmayı başlatır,  ?> ise bitirir. Eğer herhangi bir kod  ?> dışında kalırsa o kod geçersiz sayılır ve PHP derlemez.

Yorumlar[]

Yorumlar çok karışık kodları düzenler; ancak bir yorum çıktı vermez. Örnek:

<?php
// Bu bir tek satırlık PHP yorumudur
/* <- Başladı
Bu
çok
satırlı
PHP yorumu
Bitti -> */
?>

Burada herhangi bir çıktı yoktur. Yorumlar karmaşık kodları düzenlemek ve yerlerini kolayca bulmak için yazılabilirler. Bu yazımı hızlandırır ve kod anlaşırlığı sağlar.

Çıktı[]

PHP'de yazı yazmak için bazı ifadeler kullanılır. Bunlardan en çok kullanılanı echo anahtar sözcüğüdür. Bu sözcük PHP'nin çıktı vermesi için kullanılır gösterim için kullanılır. Çıktı, dillerin derlendikten sonra verdiği yazı, görüntü, im, sayı ya da ifadelerdir. PHP ile bu işlem şöyle yapılır:

<?php
echo "Merhaba Dünya";
?>

Çıktı:

Merhaba Dünya

PHP, echo anahtar sözcüğünden sonraki veriyi ekrana yansıtır. Bu işlem  ; imleçi ile bitirilinceye kadar sürer ve bu imleçişlemi bitirir. Bu imleç dilbilgisi için önemlidir; çünkü bu imleç ile işlem sonlanmazsa diğer satırda, PHP, Parser Eror yani dilbilgisi yanılgısı (hatası) verir. Yukarıdaki kod gibi yazılacak veri string ise " " tırnak imleci içerisine alınmalıdır; ancak basılacak veri integer ise buna gerek yoktur.

<?php
echo 5;
?>

Ekran çıktısı:

5

Görüldüğü gibi PHP bir sayıyı direkt anlayarak " " ifadelerine ihtiyaç duymadı. Aynı şekilde değişken kullanırken de " " ihtiyacı yoktur.

3-Değişken Oluşturma[]

PHP her türlü değişkeni her an, her yerde kullanmak üzere yaratabilir, hatta onu özel komutlar ile değiştirebilir. Fakat PHP'de atama değer yoktur. Yani kodun her yerinde değişkenin ismini ve değerini oluşturabilir, bunu isterseniz değiştirebilirsiniz, fakat her kod için yeni atamalar yapmanız gerekmez. En kolay değişken yaratma metodu aşağıdaki örnek gibidir, burada değişkenin değeri Merhabalar:

<?php
$yazi = "Merhabalar"; //İşte burada değişken oluşuyor. Değişkenin adı $'dan sonra ve değer ='den sonra.
echo $yazi . ", Bu benim ilk yazım";//Burada $yazi değerini " " içine almadık. İstersek alabiliriz.
?>

Çıktı:

Merhabalar, Bu benim ilk yazım

Basit bir "echo" komutu ile çıkan yazı bu sefer tek başına değil. Burada önceden verdiğimiz yazi değeri de var. PHP'de değişken adının önüne "$" konularak değişken oluşturulabilir. Ayrıca bu değişkenin değeri Merhaba Yani $yazi yazdığınız her yerde bu yazı görülür. Unutmayın yazılar " " içine alınır. Değişkenin ismini verirken önemli olan, değişkenin Türkçe karakter içermemesi; ama değişken $deneme, $aabb, $1234deneme, $elma gibi şeyler olabilir. Başka bir örnek:

<?php
$sayi = 3;//Görüldüğü gibi sayı adlı değişken oluştu. 3'ü " " içine almak gerekmez.
echo "PHP, $sayi adet harf içerir.";
?>

Çıktı:

PHP, 3 adet harf içerir.

Burada daha önceden belirlediğimiz $sayi değeri, 3 olarak belirlendik. Bir kod içerisinde her yerde $sayi yazarsak PHP onun 3 olduğunu anlar. Bunun yerine istenilen basamakta, istenilen sayı yazılır. Sayılar " " içine alınmaz. Bir önceki kodda değişkeni " " içine almamıştık ve . ile ayırmıştık. Burada ise " " içine aldık.

4- Operatörler[]

PHP'de her programlama gibi operatörler içerir. Asla bir kodu uzun uzun anlatamazsınız; çünkü dilin uyulması gereken kuralları vardır. Örneğin "ve", "ayrıca", "topla", "çıkar", "yanlış" gibi ifadeleri nasıl söyleyeceğiz? Tabii ki operatörler ile. Başlangıç için öğrenilmesi gereken çok önemli operatörle vardır.

1-Matematik Operatörleri[]

Operatör Tanım Örnek Sonuç
+ Toplama Operatörü
<?php echo 7 + 2; ?>
9
- Çıkarma Operatörü
<?php echo 9 - 4; ?>
5
* Çarpma Operatörü
<?php echo 3 * 5; ?>
15
/ Bölme Operatörü
<?php echo 5 / 5; ?>
1
% Kalan Operatörü (Bölüp kalan değeri döndürür)
<?php echo 9 % 2; ?>
1

Bunlar matematik operatörleri idi; fakat bunları deklare etmek için de kullanabiliriz. Önceki bölümde hep = ile değişken oluşturduk. Aşağıda atama operatörlerini bulabilirsiniz.

2-Atama Operatörleri[]

Operatör Örnek Aynı Sonucu Verir
= x=y x=y
+= x+=y x=x+y
*= x*=y x=x*y
-= x-=y x=x-y
/= x/=y x=x/y
.= x.=y x=x.y

3-Karşılaştırma Operatörleri[]

Aşağıdaki operatörler PHP'de en çok kullanılan operatörlerdir. Bunlara karşılaştırma operatörleri denir ve iki değeri karşılaştırır.IF ifadesi kodlama yapar iken bunlar çok önemli olur. Her biri PHP'deki veri tiplerini döndürür. Yani doğru (true) ya da yanlış (false) değer döndürürler. Aşağıadaki karşılaştırma operatörler örnekleri ile doğru (true) ve yanlış (false) döndürüyorlar.

Operatör Tanım Örnek Anlamı Değer
== Eşittir 5 == 8 5, 8'e eşittir Yanlış (false) olur
!= Eşit Değildir 5 != 8 5, 8'e eşit değildir Doğru (true) olur
> Büyüktür 5 > 8 5, 8'den büyüktür Yanlış (false) olur
< Küçüktür 5 < 8 5, 8'den küçüktür Doğru (true) olur
<> Büyüktür veya Küçüktür 5 <> 8 5, 8'den büyüktür veya küçüktür. Doğru (true) olur
<= Eşittir veya küçüktür 5 <= 8 5, 8'e eşittir veya küçüktür Doğru (true) olur
>= Eşittir veya büyüktür 5 >= 8 5, 8'e eşittir veya büyüktür Yanlış (false) olur

Bu operatörler dediğimiz gibi çok önemlidir. Bunlara, ileri seviye kodlarda çok ihtiyaç duyulur.

4-Mantıksal Operatörleri[]

Aşağıda mantıksal operatörler var, bunların hem sağı hem de solu doğru (true) ise doğru (true) döner değil ise yanlış (false) döner:

Operatör Tanım Örnek Anlamı Değer
&& Ve (5==20 && 10==10) 5 eşittir 20 ve 10 eşittir 10 Yanlış (false) olur
|| Veya (5==4 || 10==7) 5 eşittir 4 veya 10 eşittir 7 Yanlış (false) olur
! Değildir !(5==4) 5 eşittir 4, değildir Doğru (true) olur

5-PHP ile Matematik[]

PHP her türlü betik ve programlama dili gibi mikrosaniyelik işlemler içerir. Matematik bunların en basiti. Aşağıdaki örnekte böyle bir kod var:

<?php
$x = 3;
$y = 5;
$z = 2;
$sonuc = $x + $y * $z;//Sonucun cevabı sonuc değişkenine aktarıldı
echo $sonuc;//PHP bu işlemin sonucunu hesapmıştı ve sonuc değişkeninin gösterdi
?>

Çıktı:

13

Burada değerlerini verdiğimiz x,y ve z değişkenleri üzerinde minik bir toplama ve çarpma işlemi yaptık. Burada önemli olan echo komutu " " ile verilmemesi. Eğer " " içerisine yazsaydık PHP direkt bize 3 + 5 * 2 çıktısı verirdi. Fakat işlem ( ) içerisine de yazılabilir. Burada değer bir değişkene atanmış. Başka bir örnek:

<?php
$x = 3;
$y = 5;
$z = 2;
$i = (($y * $z)/10) + $x; //Cevap 4 => 10 bölü 10 artı 3
echo $i;//Şimdi i'yi gösterecek
?>

Ve görülecek sonuç:

4

Burada işlemin sonucunu da bir değişken yaptık. Bir işlem verdik ve dedik ki, sonucu da i değişkenidir. echo komutu ile de bunu gösterdik. Daha ileri bir matematik işlemi, bu sefer önceden bahsedilen echo() kullanıldı:

<?php
$x = 1;
$y = 2;
$z = 3;
$n = 4;
echo(($x + $y + $z + $n)+($x + $y + $z + $n)/2);
?>

Ve görülecek sonuç:

15

Burada iki işlemi parantez ( ) içerisine alıp birbiriyle topladık. Sonuç ise echo komutu ile gözüktü. Fakat dikkat edin echo'nun da parantezi var. Yani:

echo( (1. işlem) + (2.işlem) );

şeklinde bir işlem var. PHP bu iki işlemi önce hesaplar ve daha sonra parantezleri açarak işlemi bitirir (Güncel matematik kanunları ve işlem önceliği) daha sonra çıkan sonucu ekran çıktısı ile yayınlar.

6-Olasılık ve Denetim İfadeleri[]

PHP, akışı bol olabilecek bir betik dilidir. Bu akışı denetlemek, filtrelemek, kontrol etmek, düzenlemek, değer kazandırmak ve denemek için bazı ifadeler kullanılır. Aynı zamanda bu ifadeler betiğe matematiksel bir olasılık kazandırır. Bu ifadeler kodlar içinde iç içe geçerek akışı denetlerler.

1-If, Elseif, Else[]

Php dili her dildeki gibi "if" deyimine sahiptir. Bu çok sade olarak bildiğimiz "eğer" demektir. Yani "eğer" bir şey olur ise, şunu yap ve şunu yapma ayrıca bu olur ise şunu yap ya da yapma demeye yarar. Aslında daha önceden bilinen "Boolean" veri tipleri için kullanılır En basit örnek:

<?php
$x = 1;
$y = 2;
if ($x == $y) //Eğer bu TRUE(doğru) ise...
echo "İki sayı birbirine eşittir.";//Bunu yap.
else //Eğer FALSE(yanlış) ise...
echo "İki sayı birbirine eşit değildir.";//Bunu yap.
?>

Sorulan soruya PHP anında cevap verir:

İki sayı birbirine eşit değildir.

Burada PHP ye sorduk x ve y eşit midir ? : "eğer" x ve y eşit ise "İki sayı birbirine eşit" de, ama eğer değil ise "İki sayı birbirine eşit değil." de. Yani demek oluyor ki "if", "eğer" demek bunu söyledikten sonra "else" diyerek eğer buna uymaz ise yapacağı şeyi söyleriz. Unutmayın PHP sadece eco'dan ibaret değildir. İleride "eğer" x, y'ye eşitse, bir işlem yap, "uymuyorsa" başka bir şey yap! PHP bunun için özellikle yapılmış bir dil. ÇOK ÖNEMLİ:Eğer yukarıdaki gibi tek iş veriyorsanız her bir if, elseif veya else'yi { } ile kapatmanıza gerek yok. Aşağıdaki örnek gibi 1'den fazla iş veriyorsanız { } ile kapatmalısınız!

<?php
$x = 1;
$y = 2;
if ($x == $y)
{
print "İki sayı birbirine eşittir.";
echo " Yani:
";
echo $x . "ile" . $y . "eşit sayılardır";
}
else
{
print "İki sayı birbirine eşit değildir.";
echo " Yani:
";
echo $x . "ile" . $y . "eşit sayılar değildir.";
}
?>

Çıktı:

İki sayı birbirine eşit değildir. Yani: 1 ile 2 eşit sayılar değildir.

Burada print komutu semboliktir. Yani bu komut yerine echo verilebilir. Kısaca print komutu "Bir yazıyı insanların görebileceği hale getirmektir."Şeklinde anlatılır. Aynı zamanda burada şuna dikkat edilmeli, if'e 1'den fazla görev verildiği için program { } içine alındı. Şimdi kısa bir elseif programı örneği:

<?php
$x = 1;
$y = 2;
if ($x == $y)
echo "İki sayı birbirine eşittir.";
elseif ($x > $y)
echo "$x büyüktür $y";
else
echo "$x küçüktür $y";

?>

Çıktı:

1 küçüktür 2

Burada yaptılan şey aslında bir if daha eklemek; yani sisteme şunu sormak:

Eğer, x eşitse y, "İki sayı birbirine eşit" yaz.
Ayrıca Eğer x büyükse y, "x büyüktür y" yaz.
Hiçbiri değilse, "x küçüktür y" yaz.

Tabii bu sadece insanların anlayabileceği PHP ise eğer(if), ayrıca eğer(elseif) ve hiçbiri değilse(else) olarak algılıyor. Aynı şekilde çoklu sistemli bir if, elseif, else programı:

<?php
$x = 20;
$y = 10;
$z = 15;
if ($x == $y and $y == $z)
{
echo "$x, $y ve $z eşit sayılardır." . "
";
print "Her sayı birbirine eşittir.";
}
elseif ($x > $y and $z > $y)
{
echo "$x ve $z sayıları $y'den büyüktür" . "
";
print "Her sayı birbirine eşit değildir.";
}
elseif ($x and $y > $z)
{
echo "$x ve $y sayıları $z'den büyüktür." . "
";
print "Her sayı birbirine eşit değildir.";
}
else
{
echo "$x, $y ve $z sayıları eşit değillerdir." . "
";
print "Her sayı birbirine eşit değil.";
}

?>

Çıktı ise şu şekilde çıkar:

20 ve 15 sayıları 10'den büyüktür
Her sayı birbirine eşit değildir.

Burada şu şekilde bir işle yapıldı. Önceden atanan 10, 15 ve 20 değerli x, y ve z bilinmeyenleri var. Bizde PHP'ye bazı sorular sorduk. Bunun cevabını PHP bize yazdı. Dikkat! Bir if'den sonra gelecek, ona bağlı ifler mutlaka elseif ile yazılmalıdır ve bu bağıntı else ile bitmelidir. Aksi taktirde, PHP hata vermez fakat program performans ve doğruluk bakımından sapar. Yani yanlış sonuçlar verebilir.

PHP aynı zamanda durum operatörünü (Ternary Operation) de destekler.

<?php
$a = 15;
$b = 9;
$c = 7;

if(($a > $c) && $c > ($a - $b))
{
print("Hesaplama Başarılı Oldu.
");
}
else
{
print("Hesaplama Başarısız Oldu.
");
}

?>

Çıktı:

Hesaplama Başarılı Oldu.

Yukarıdaki kod parçasının durum operatörü (Ternary Operation) ile yazılmış hali aşağıda görüldüğü şekildedir:

<?php
$a = 15;
$b = 9;
$c = 7;

($a > $c) && ($c > ($a - $b)) ? print("Hesaplama Başarılı Oldu.
") : print("Hesaplama Başarısız Oldu.
");

?>

Çıktı:

Hesaplama Başarılı Oldu.

IF karar kontrol mekanizmasına hiçbir karşılaştırma kriteri verilmese bile, kendisi boolean yani Doğru/Yanlış (true/false) şeklinde bir denetim gerçekleştirebilmektedir. Yukarıdaki işlemin sayılar üzerindeki çözümünü hesaplar ve IF karar kontrol mekanizmasının işleyişine göre yorumlarsak doğru (True) çıktığını ve bu nedenle ilk kod bloğunun çalıştırıldığını görebilirsiniz.

&&(AND) -> Bitsel karşılaştırma operatörlerindendir. VE(AND) anlamına gelir. Sağında ve solundaki iki tarafında doğru(True) dönmesi sonucu karar kontrol mekanizmasına doğru(True) döner. Aksi taktirde her koşulda yanlış (False) dönmektedir.

Şimdi işlemimizin sayısal ifade edilişi ile inceleyelim.

(15 > 7) AND (7 > (15 - 9))

İlk sol taraftaki işlemi yapalım ve sonucu işleme ekleyerek tekrar inceleyelim. (15 > 7) ifadesi ile 15'in 7'den büyük olup olmadığı sorgulanmaktadır.

15, 7'den küçük olmadığından karar kontrol mekanizmasının ilk bölümü doğru(True) dönecektir.

Sağ tarafta ise önce (15 - 9) ve arından çıkan sayının 7'den büyük olup olmadığı karşılaştırılmasıdır. Burada gittiğim işlem sırası matemateki işlem sırası ile bire bir aynıdır. PHP yorumlayıcısı da bu kurallara uymaktadır.

15 - 9 = 6'dır. 7, 6'dan büyük olduğundan bu karşılaştırmada doğru(True) dönecektir.

Daha önce belirtildiği üzere AND (&&) operatörü kullanarak IF karar kontrol mekanizması üzerinde bir mantıksal karşılaştırma yaparken ancak her iki tarafında doğru (True) dönmesi sonucu ilk kod blogu çalıştırılmaktaydı. Buradaki işlem sonucunda da her iki tarafta doğru(True) döndüğünden ekran çıktısı olarak Hesaplama Başarılı Oldu. metnini vermektedir.

NOT: Durum operatörü ile geriye değer dönerken(return) kontrol sağlayamazsınız. (Örn: !$a ? return 1 : return false; gibi...)

2-Switch[]

PHP ile kodlama yaparken sadece if kullanarak olasılıksal ifade yapmayız. Bazı işlemler switch ifadesi kullanarak yapılır. Yani verilen değeri değiştirerek bir sonuç elde eder. Bunu basit bir örnekte gösterebiliriz:

<?php
$x = 5;
switch ($x)//x...
{
case 1://1 ise...
echo "Verilen sayı, 1";//Bunu yap.
break;
case 3://3 ise
echo "Verilen sayı, 3";//Bunu yap.
break;
case 5://5 ise...
echo "Verilen sayı, 5";//Bunu yap.
break;
default://Hiçbiri değilse...
echo "Verilen sayı 1, 3 veya 5 değil.";//Bunu yap.
}
?>

Çıktı:

Verilen sayı, 5

Bu şu şekilde oluyor. 5 değerini x'e atadık. switch komutunu x'e uyguladık ve sorular sorduk. PHP her soruya case ifadesi ile başlar. Sizin elde etmek istediğiniz sonuçlar case ifadesinden sonra gelmeli. Burada dikkat edilmesi gerekilen başka bir şey ise her olasılık ifadesinin break ifadesi ile bitmesi. Eğer değer hiçbir ifadeye uymazsa tıpkı else gibi default ifadesi vardır ve bu değer yapılır. Başka bir örnek:

<?php
$x = "PHP";
switch ($x)
{
case "ASP":
echo "x değeri ASP'dir.";
break;
case "JS":
echo "x değeri JS'dir.";
break;
case "PHP":
echo "x değeri PHP'dir.";
break;
default:
echo "x değeri ASP, PHP ya da JS değildir.";
}
?>

Çıktı:

x değeri PHP'dir.

Burada görülüyor ki case mutlaka sayı olması gerekmiyor." " arasına istenilen yazı yazılabiliyor. Bu alıştırmaları iyici anladıktan sonra aşağıdaki alıştırmaya bakınız. Bu hem PHP'de matematik hem de olasılığın birleştirilmesidir. Lütfen ilk önce t bilinmeyeninini hesaplamayın. İlk önce kod işleyişine bakın.

<?php
$x = 5;
$y = 10;
$z = 20;
$t = (($y + $y) / $z) * ($x - $y);
switch ($t)
{
case 5:
echo "Değer 5'dir.";
break;
case 10:
echo "Değer 10'dur.";
break;
case -10:
echo "Değer -10'dur.";
break;
default:
echo "Değer 5, 10 ya da -10 değildir.";
}
?>

Çıktı:

Değer 5, 10 ya da -10 değildir.

3-İç İçe geçmiş İfadeler[]

PHP'de tekbir if, tek bir switch ifadesi her şeye yetmez. Aşağıdaki örnek gibi ifleri, switchleri iç içe geçirebilirsiniz. Aşağıdaki örnek bir matematik kodunun bir kısmıdır. Bu kodu inceler iken iflerin ve switchlerin yerine iyi bakın.

<?php
$a = 321;
$b = 742;
$c = 26;
if ($a and $b > $c)
{
if ($a > $b)
echo "$a en büyük sayı.";
else
echo "$b en büyük sayı.";
}
elseif ($b and $c > $a)
{
if ($b > $c)
print " ";
else
echo "$c en büyük sayı";
}
else
{
print " ";
switch ($a)
{
case $b:
echo "$a eşittir $b";
break;
case $c:
echo "$a eşittir $c";
break;
default:
print " ";
}
}
?>

Çıktı:

742 en büyük sayı.

Burada dikkat edilmesi gereken çok önemli hususlardan biri, her if'in kendi içinde { } ile kapatılması. Unutulmamalı ki, if'in, elseif'in veya else'in içinde if olabilir ama bunlar { } içine alınmalıdır. Ayrıca if, elseif veya else içerisinde switch ifadesi bulunabilir.

7- Fonksiyonlar[]

PHP fonksiyonel bir dildir ve daha önce yapılmış scriptlerdeki fonksiyon ağırlığı %80'i geçiyor. Yani en basitinden en zoruna scriptler yazarken %80'den fazlasını fonksiyon olarak yazıyoruz. PHP'de bini aşmış fonksiyon vardır hatta her yapılan sürüm atlamasından dolayı binleri bile geçmiştir. Fakat, ne PHP ne de başka bir dilde bir kullanıcının her işini yapacak fonksiyonlar bulunmaz. Siz kendi fonksiyonlarınızı yaparsınız. Yani tıpkı PHP'deki hazır fonksiyonlar gibi siz de fonksiyon yapabilirsiniz. Örnek:

<?php
function yaz()
{
echo "İlk PHP fonksiyonum.";
}
?>

Bu kod hiçbir şey yapmaz! Çünkü sadece fonksiyonun ne yapacağını anlattınız yani deklare ettiniz. Daha bunu yap komutunu vermediniz. Aşağıdaki kod fonksiyonu uygular:

<?php
function yaz()
{
echo "İlk PHP fonksiyonum";
}
yaz();
?>

Çıktı:

 İlk PHP fonksiyonum.

Yani en anşılacak şekilde, PHP tanımlanan fonksiyonu uyguluyor. O ne yapması gerekiyorsa yapıyor. İlk önce "function" ifadesi ile yeni bir fonksiyon yapacağım diyorsunuz. Sonra ismini verip değişkenleri belirliyorsunuz. Anlaşılması için dizayn edilen yapı:

function fonksiyon_adi($degisken)
{
//Fonksiyonun yapması gereken olaylar
}

Şimdi de değişkenli bir fonksiyon yazalım:

<?php
function topla($x, $y)
{
echo($x + $y);
}
?>

Bu fonksiyon değişken içerir. Ne yaptığını sadece bilir verilen fonksiyona göre farklı şeyler yazar. Görevi ise x ve y değişkenlerini toplamaktır. Örnek kullanımı:

<?php
function topla($x, $y)
{
echo($x + $y);
}
echo( topla(5,10);
?>

Çıktı:

15

Bu fonksiyonun görevi verilen değerleri toplamaktı. İşte toplayıp yazdı. Şimdi daha başka bir fonksiyona bakın, fakat bundan önce çok önemli bir bilgi:

<?php
echo();//Şimdiye kadar öğrendiğimiz en önemli fonksiyon.
//UNUTMAYIN, " " içinde gösterilen şey "string" olur
?>

Yani echo komutu mutlaka string cinsinden verileri gösterir. Yani fonksiyona:

function deneme()
{
echo 5;
}

deseniz bile gösterilen şey string (yazı) olur. Ama bazen size mutlaka ve mutlaka integer (tam sayı) gerekir, işte o zaman şunu kullanırsınız:

<?php
function topla($x, $y) //Fonksiyonu oluşturuyoruz.
{
return $x + $y; // x ve y nin toplamı değerine dönüyor
}

echo( topla(5,10) ); //Şimdi de işlem sayı (int) olarak döndü
?>

return ifadesi fonksiyonu sayı cinsinden döndürür. Yani fonksiyonun cevabı x ve y nin toplamı olan sayı olur.

8- Yazım[]

PHP'nin söz dizimi C dillerinden gelmektedir. Yani PHP C'den esinlenmi bir dildir. PHP'nin asıl söz dizimi kaynağı Perl olmuştur. Aynı şekilde PHP de Falcon, Delphi gibi bir çok dilin esin kaynağı olmuştur; çünkü diller arasında sürekli bir söz dizimi alış verişi vardır. Bunlara "söz dizimi" ya da İngilizce anılımı ile "syntax" denilir. Syntaxlar yazımı denetler ve ayırırlar. Bunları toplamda 3 başlıkta ayırırız:

LEXER PARSER TREE
Tanımlandırıcı ya da Lexer, kaynak kodundan gelen tokenleri isimlendirir ve ayırır. Bunları ayırdıktan sonra tanımlandırır. Örneğin if($x=5){echo"Merhaba";} şeklinde bir kodu Lexer if - ( - $x - = - int(5) - ) - { - echo - " - str(Merhaba) - " - ; - } şeklinde ayırır. Bu ayırıma "Lexical Analysis" denir. Buradan sonra kaynak kodu Parser'e gider. İnceleyici ya da Parser, Lexerden gelen tokenleri inceler. Syntax yani söz dizimine göre dizer. Örneğin eğer Lexer if($x=5) şeklinde bir kod gönderdiyse hemen eror verir. Bunları inceleyerek, hataları ve işlevleri oluşturduktan sonra Tree'ye gönderir. Parser Tree ya da Ağaç Dizici, parserden gelen işlevleri ve hataları sıraya dizer, görevlerine göre dizer ya da HTML ile belirtilen şekillerde dizer. Bunlara ad verir. Mesela fonksiyonları bir gruba, ögeleri bir gruba, döngüleri bir gruba alır. Buna göre derleyiciye yollar.

Bundan sonrası PHP'nin derleyicine kalmış. PHP derlenir yani HTML kodları oluşur. Şu çok önemlidir ki PHP her zaman derlenerek HTML diline çevrlir, bu da tarayıcı tarafından anlaşılır. PHP'nin en önemli özelliği white sensitive ve case sensitive olmaması; ancak değişkenlerin case sensitive olmasıdır. Bunlar şu demektir:

Case Sensitive White Sensitive
Case Sensitive, seslerin büyük küçük olduğunu ayırt eder. Örneğin; array() ile Array() çok farklı şeylerdir. PHP böyle bir dildir; "a" ile "A" farklıdır. Ancak örneğin SQL böyle bir dil değildir. White sensitive, boşlukları eder. 3 adet boşluk vardır. "space" bir adet boşluk bıraktırır, "enter" bir satır atlatır ve "tab" belli bir aralık bırakır. Örneğin böyle dillere göre if x=5 ile if

x=5 farklıdır. PHP böyle bir dil değildir. Yani boşlukları yok sayar.

<?php
$x = rand(5,10); //rand() fonksiyonu iki sayı arasında rastgele sayı üretir
//rand sayı üretti ve x'e atadı.
if($x < 5)
{
echo "İmkansız; çünkü bu sayı mutlaka 5'den büyük olmalı";
}
if($x > 5)
{
switch ($x)
{
case 6:
echo "Sayı 6'dır.";
case 7:
echo "Sayı 7'dır.";
case 8:
echo "Sayı 8'dır.";
case 9:
echo "Sayı 9'dır.";
case 10:
echo "Sayı 10'dır.";
}
}
?>

Bu kod düzenli yazılmış, yani okunması kolay şekilde, bu kodu PHP şüphesiz çok kolay anlar. Bir şu kod var:

<?php
$x= rand (5,
10) ;
if($x
< 5 ){echo
"İmkansız; çünkü bu sayı mutlaka 5'den büyük olmalı"
;
}if($x > 5){


switch ($x){
case 6:
echo
"Sayı 6'dır."
;
case 7
:


echo "Sayı 7'dır.";case 8:echo "Sayı 8'dır.";


case 9:


echo
"Sayı 9'dır."
;
case 10
:
echo "Sayı 10'dır.";


}
}
?>

Bu kod oldukça az anlaşılır. Hatta bu kodu görünce anlamak oldukça zor; ancak PHP bu kodu da işler yani anlar. Sadece performans kaybı denilen olay gerçekleşir. PHP boşlukları ayırt ederken mikro saniyelik gecikmeler yaşar. Eğer çok büyük bir sistem çalışıyorsa bu mili saniyelere hatta saniyelik gecikmelere yol açar. Ama yine de PHP bunu işleyebilecek yapıdadır; çünkü boşlukları saymak. Aynı şey büyük, küçük sesler için geçerli değildir. Örneğin:

<?php
$x = RAND(5,10);
IF($x < 5)
{
EcHo "İmkansız; çünkü bu sayı mutlaka 5'den büyük olmalı";
}
If($x > 5)
{
Switch ($x)
{
Case 6:
ECHO "Sayı 6'dır.";
Case 7:
ECHO "Sayı 7'dır.";
Case 8:
ECHO "Sayı 8'dır.";
Case 9:
Echo "Sayı 9'dır.";
case 10:
Echo "Sayı 10'dır.";
}
}
?>

Bu şekilde yazım da PHP tarafından anlaşılacaktır, ancak tavsiye edilmemektedir. Bununla beraber, $x il $X aynı şeyler değildir, zira değişken isimleri case sensitive'dir.

Nesne Yönelimli Programlama[]

PHP 5 sürümünden itibaren nesne yönelimli programlamaya tamamen uygun hale getirilmiştir. Görünürlük, Sınıf Soyutlama, final Anahtar Sözcüğü, Sihirli Yöntemler, Nesne Arayüzleri, Nesne Kopyalama ve Tür Dayatma gibi özellikler geliştirilmiştir. Bunlarından yanında isim alanları ve tasarım desenlerininde PHP dili için uygulanması, kurumsal uygulamalarda PHP'nin kullanımı arttırmıştır.

PHP'de nesne yönelimli programlama mantığı en basit şekilde aşağıdaki gibidir.

<?php
/**
* PHP | NYP
* @author isimweb
* @copyright GPL
*/

class islem{
// Sınıflar nitelik ve davranışlardan oluşmaktadır.
// islem isminde bir sınıf oluşturuldu.

var $a; //Nitelikler var ile belirtilir.
var $b;

//Bu kısımda davranışlar belirlenir.
function topla ($a,$b)
{
echo $a+$b;
}

function cikar($a,$b)
{
echo $a-$b;
}

function carp($a,$b){
echo $a*$b;
}

function bol(){
echo $a/$b;
}
}
//Yazmış olduğumuz sınıfı kullanmak için iki yöntemi de kullanabilirsiniz.
islem::carp(5,3);
echo "
";
$opr = new islem();
$opr->carp(5,3);
?>


PHP'de İsim Alanları (Name Space)[]

Bildiğiniz üzere PHP, 5.3.x versiyonundan itibaren NameSpace ‘i desteklemeye başlamıştı. PHP 6.x ile OOP adına bir çok şeyin yerine oturması beklenmektedir ve PHP 6′ı ile OOP yapısının tamamiyle oturmuş olması beklenmektedir.

Öncelikle NameSpace’ler hakkında kısa bir bilgi verelim ve hemen örneklere geçelim. NameSpace yani İsim Alanları PHP’de benzer isimdeki class,constant ve function’ları aynı sayfa/proje içerisinde kullanmamızı sağlar ve daha okunabilir ve anlamlı object mimarileri kurmamızı sağlar. Windows File System olarak kafanızda canlandırabilirsiniz.

X:\ sürücü altına bir klasör oluşturup herşeyi bunun içine koyduğunuzu düşünün. İçindeki dosya sayısı 1.000′i geçtiğinde veya yaklaştığında, artık içinde bir şey bulmanız zorlaşacaktır. NameSpace’leri PC’ye uyarlarsak. A0023.jpg diye bir dosyanızın olduğunu varsayalım. Bu dosyayı X:\ sürücüsünün içindeki 10,000 dosya içerisinde aramak mı daha kolay? Yoksa X:\ sürüsünün altına X:\Photos\Summer\2009\A0023.jpg diye bir path’te bulmak mı? NameSpace’ler de bu şekilde kodlarımızı ayırmamızı sağlar. Yine WFS(Windows File System)’de olduğu gibi X:\Photos\Summer dizini altına foo.txt diye bir dosya oluşturabileceğiniz gibi X:\Photos\Summer\2009 dizini altınada aynı isimde bir dosya oluşturanız WFS size karışmayacaktır.

Aynısını NameSpace’e göre açıklarsak; fooPage.php içerisinde namespace spaceOne { const fooC = 9; } ve namespace spaceTwo{ const fooC = 7; } diye yazdığımızda ikitane aynı isimde constant olmasına PHP kızmayacaktır. Çünkü farklı namespace’ler de bulunmaktalar. WFS’e göre farklı dizinler diye düşünebilirsiniz.

PHP ile NameSpace kullanımı anlatan OOP standartlarında örnek bir kod;

<?php
/**
* PHP | NameSpace
* @author Hakan DAMAR
* @copyright GPL
*/
declare(encoding="UTF-8");

namespace mainSpace{

const conn_open = 1;
class Connection{}
function Connect(){}

}


namespace secondSpace{
const conn_open = "Connected";
class Connection{}
function Connect(){}
}
namespace childSpace{
use secondSpace as ss;
function getConnectionStatus(){
$conn_open = ss\conn_open . "!!!";
return $conn_open;
}
}
namespace {

print(\mainSpace\conn_open."
");
print(\secondSpace\conn_open."
");
print(\childSpace\getConnectionStatus());

} ?>

Örnektende anlaşılacağı üzere namespace’ler namespace <nameSpace Adi> şeklinde tanımlanır. Peki, en altta isimsiz bir namespace var? O global namespace’dir. İçerisinde hem diğer namespace’leri çağırabilirsiniz hem de normal PHP kodlarınızı yazmaya devam edebilirsiniz. En üstteki declare() metodu object’in encoding’ini belirtmek için kullanılmaktadır. enconding haricindeki Diğer property’leri namespace kullanılan sayfalarda kullanılamaz!

Bir de childSpace’de use secondSpace ile seconSpace’i çağırdık ve as ss ile secondSpace ismini ss keyword’ne atadık. Değişken tanımlamak gibi düşünürsek $ss = “secondSpace”; dir. Bundan dolayıda artık secondSpace’i ss temsil edecektir. Bu nedenle $conn_open variable’ın da secondSpace\conn_open yerine ss\conn_open kullanılmıştır.

NOT: namespace tanımı üzerinde declare(); metodu hariç hiçbir kod olamaz, aksi taktirde PHP Compiler ERROR dönecektir.

Ek bilgiler[]

PHP, özellikle mysql veritabanıyla birlikte ve Linux işletim sistemi altında iyi bir performans sergilmektedir. C/C++ diline olan benzerliği nedeniyle bu dili önceden bilenlerin PHP öğrenmesi oldukça kolaydır. Kolay öğrenilmesi ve hızlı performansı nedeniyle Facebook, YouTube, Yahoo, Wikipedia ve OGame gibi dünyaca ünlü sitelerin yazımında kullanılmasına rağmen, kodların kolay anlaşılabilmesi açısından ve birden fazla programcı tarafından sürekli geliştirilmesi gerekli büyük projelerde Java nın kullanılması daha uygun görülmektedir. Ancak sadece web tabanlı yazılımın geliştirilmesi söz konusu olduğunda Java ya göre öğrenilmesinin daha kolay olması nedeniyle genellikle PHP tercih edilmektedir. PHP, web tasarımında önemli kolaylıklar sağlasa da 2005 te Google in AJAX kullanmaya başlamasından sonra tek başına öğrenilmesi yeterli olmamakta ve AJAX'ı öğrenmek için gerekli JavaScript, XML, HTML, (ve CSS) ile birlikte bir bütün oluşturabilmektedir.

Geliştiriciler[]

Önemli PHP Geliştiricileri
Rasmus Lerdorf cropped.jpg Andi Gutmans 1.jpg Zeev Suraski 2005 cropped.jpg
Rasmus Lerdorf Andi Gutmans Zeev Suraski
Danimarka asıllı Kanadalı, programcı. PHP'nin mucidi ve geliştiricisi. 2002'den beri Yahoo Şirketi için çalışmakta. Aynı zamanda Apache HTTP Sunucusu projesinin başlamasını sağladı. Joomla! gibi GNU PHP projelerin güvenliğini kontrol ediyor. İsrail asıllı programcı. PHP'nin gelişmesinde çok büyük emeği olmuştur. Aynı zamanda Zend Motoru hakkındaki çalışmaları çok önemlidir. İsrail asıllı programcı. Zend Motorunu icat etti. PHP için bir betik motoru ve aktif derleyici oluşturdu.

Ayrıca bakınız[]

Kaynakça[]

Dış bağlantılar[]



Şablon:Tekno-taslak

Advertisement