PHP
| Paradigması | çok paradigmalı: zorunlu, nesne yönelimli, yordamsal, yansıtıcı |
|---|---|
| İlk çıkışı | 1995 |
| Tasarımcısı | Rasmus Lerdorf |
| Geliştiricisi | PHP Grubu |
| Kararlı sürüm | 5.3.4 (10 Aralık 2010) |
| Tip sistemi | zayıf, dinamik |
| Önemli uygulamaları | Zend Engine, Phalanger, Quercus, Project Zero, HipHop |
| Etkilendikleri | C, Perl, Java, C++, Tcl |
| Etkiledikleri | PHP4Delphi |
| Uygulama dili | C |
| Platformu | çapraz platform |
| Lisans | PHP Lisansı |
| Olağan dosya uzantıları | .php, .phtml .php5 .phps |
| Web sitesi | www.php.net |
PHP : Hypertext Preprocessor (Türkçe: Üstünyazı Önişlemcisi [1]) (Aslen: Personal Home Page - Kişisel Ana Sayfa) , genelağ için yaratılmış, sunucu taraflı, çok geniş kullanımlı, genel amaçlı, HTML içerisine gömülebilen betik ve programlama 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.
[değiştir] 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. |
[değiştir] Avantajları
| Bu madde veya bir kısmı, Vikipedi standartlarına uygun değildir ve bu nedenle düzenlenmesi gerekmektedir. Sayfayı Vikipedi standartlarına uygun biçimde düzenleyip, geliştirerek Vikipedi'ye katkıda bulunabilirsiniz. NOT: Gerekli değişiklik yapılmadan bu şablon kaldırılmamalıdır. Bu madde Eylül 2011 tarihinden beri, düzenleme isteğiyle etiketlidir. |
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
[değiştir] 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.
[değiştir] Lisans
PHP, kendine ait PHP License altında lisanslanmış ücretsiz bir yazılımdır ve kullanıcılarına şunu dayatır:
4. Bu yazılımdan türetilmiş ürünler, group@php.net'ten yazılı izin alınmadan,
PHP olarak isimlendirilemez veya isimlerinin herhangi bir bölümünde PHP ismi gözükemez.
Yazılımınızın PHP ile birlikte çalıştığını vurgulamak için "PHP Foo" yada "phpfoo" gibi
isimleri kullanmak yerine "Foo for PHP" gibi isimler kullanabilirsiniz.
[2] İsimlendirmede kullanılan bu kısıtlama PHP'yi GNU General Public License (GPL)[3] ile uyumsuz yapar.
[değiştir] 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:
- 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.
- 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...
- 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.
- 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.
- 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.
- Object (obj): Nesnelerdir. Class yani sınıf yazarken nesne tabanlı kullanılır.
- Resource: Kaynak tipidir. Veri tabanından gelen bilgilerin değişken olmasından kaynaklı bu tip ile kaydedilir.
- 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.
[değiştir] PHP Kod Yapısı
[değiştir] PHP Kod Yapısı Hakkında
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.
[değiştir] 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.
[değiştir] Yorumlar
Yorumlar çok karışık kodları düzenler; ancak bir yorum çıktı vermez. Örnek:
<?php // Bu bir tek satırlık PHP yorumudur /* Bu çok satırlı PHP yorumu */ ?>
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.
[değiştir] Çı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.
[değiştir] 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.
[değiştir] 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.
[değiştir] 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.
[değiştir] 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 |
[değiştir] 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.
[değiştir] 4-Mantıksal Operatörler
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 |
[değiştir] 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 hesaplamış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.
[değiştir] 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.
[değiştir] 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:<br />"; echo $x . "ile" . $y . "eşit sayılardır"; } else { print "İki sayı birbirine eşit değildir."; echo " Yani:<br />"; 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 yapı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." . "<br />"; print "Her sayı birbirine eşittir."; } elseif ($x > $y and $z > $y) { echo "$x ve $z sayıları $y'den büyüktür" . "<br />"; 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." . "<br />"; print "Her sayı birbirine eşit değildir."; } else { echo "$x, $y ve $z sayıları eşit değillerdir." . "<br />"; 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. <br />"); } else { print("Hesaplama Başarısız Oldu. <br />"); } ?>
Çı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. <br />") : print("Hesaplama Başarısız Oldu. <br />"); ?>
Çı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...)
[değiştir] 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.
[değiştir] 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.
[değiştir] 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.
[değiştir] IP Trafiği
(sakın 1 yazmayın, c++ ve PHP farklıdır)<?php if ( !defined( '<yazılımın ismi>' ) ) { echo "<fonksiyonun ismi"; exit( 1 ); } # Add messages global $wgMessageCache, $wg<FonksiyonMesjları>; foreach( $wgFonksiyonMesjları as $key => $value ) { $wgMessageCache->addMessages( $wgCheckUserMessages[$key], $key ); } class <Fonksiyon> extends Listes,<Sayfa> { function <Fonksiyon>() { <Değişkenin olduğu sayfa>::<Değişkenin olduğu sayfa>('<Fonksiyon>', '<fonksiyon>'); } function execute( $par ) { global $wgRequest, $wgOut, $wgTitle, $wgUser; if ( !in_array( '<kullanıcı grubu ismi>', $wgUser->getRights() ) ) { $wgOut->setArticleRelated( false ); $wgOut->setRobotpolicy( 'noindex,nofollow' ); $wgOut->errorpage( 'nosuchspecialpage', 'nospecialpagetext' ); return; } $this->setHeaders(); $ip = $wgRequest->getText( 'ip' ); $user = $wgRequest->getText( 'user' ); $subip = $wgRequest->getBool( 'subip' ); $subuser = $wgRequest->getBool( 'subuser' ); $this->doTop( $ip, $user ); if ( $subip ) { $this->doIPRequest( $ip ); } else if ( $subuser ) { $this->doUserRequest( $user ); } else { $this->showLog(); } } function doTop( $ip, $user ) { global $wgOut, $wgTitle; $action = $wgTitle->escapeLocalUrl(); $encIp = htmlspecialchars( $ip ); $encUser = htmlspecialchars( $user ); $wgOut->addHTML( <<<EOT ); } function doIPRequest( $ip ) { global $wgUser, $wgOut, $wgLang, $wgDBname; $fname = 'CheckUser::doIPRequest'; if ( !$this->addLogEntry( $wgLang->timeanddate( wfTimestampNow() ) . ' ' . $wgUser->getName() . ' got edits for ' . htmlspecialchars( $ip ) . ' on ' . $wgDBname )) { $wgOut->addHTML( '<p>''Buraya uyarıyı yazın''</p>' ); } $dbr =& wfGetDB( DB_SLAVE ); $res = $dbr->select( 'recentchanges', array( '*' ), $this->getIpConds( $dbr, $ip ), $fname, array( 'ORDER BY' => 'rc_timestamp DESC' ) ); if ( !$dbr->numRows( $res ) ) { $s = "No results\n"; } else { global $IP; require_once( $IP.'<veritabanı kaynağı>' ); require_once( $IP.'<yazılım kullanıcı kaynağı>' ); if ( in_array( 'newfromuser', array_map( 'strtolower', get_class_methods( 'ChangesList' ) ) ) ) { // MW >= 1.6 $list = ChangesList::newFromUser( $wgUser ); } else { // MW < 1.6 $sk =& $wgUser->getSkin(); $list = new ChangesList( $sk ); } $s = $list->begin<Veritabanı1>(); $counter = 1; while ( ($row = $dbr->fetchObject( $res ) ) != false ) { $rc = <Veritabanı1>::newFromRow( $row ); $rc->counter = $counter++; $s .= $list-><Veritabanı1ismi>( $rc, false ); } $s .= $list->end<Veritabanı1>(); } $wgOut->addHTML( $s ); $dbr->freeResult( $res ); } /** * Yazı formatındaki şeyi yerleştirdiğimizden beri, bu sadece kolaylıkla çalışır * örnek;, /16 and /24. gibi * @param Database $db * @param string $ip * @return array conditions */ function getIpConds( $db, $ip ) { // haaaack if( preg_match( '#^(\d+)\.(\d+)\.(\d+)\.(\d+)/(\d+)$#', $ip, $matches ) ) { list( $junk, $a, $b, $c, $d, $bits ) = $matches; if( $bits == 32 ) { $match = "$a.$b.$c.$d"; } elseif( $bits == 24 ) { $match = "$a.$b.$c.%"; } elseif( $bits == 16 ) { $match = "$a.$b.%"; } else { // Other sizes not supported. /8 is too big $match = $ip; } return array( 'rc_ip LIKE ' . $db->addQuotes( $match ) ); } else { return array( 'rc_ip' => $ip ); } } function doUserRequest( $user ) { global $wgOut, $wgTitle, $wgLang, $wgUser, $wgDBname; $fname = 'CheckUser::doUserRequest'; $userTitle = Title::newFromText( $user, NS_USER ); if( !is_null( $userTitle ) ) { // normalize the username $user = $userTitle->getText(); } if ( !$this->addLogEntry( $wgLang->timeanddate( wfTimestampNow() ) . ' ' . $wgUser->getName() . ' got IPs for ' . htmlspecialchars( $user ) . ' on ' . $wgDBname ) ) { $wgOut->addHTML( '<p>''Buraya mesajınızı yazın''</p>' ); } $dbr =& wfGetDB( DB_SLAVE ); $res = $dbr->select( 'recentchanges', array( 'DISTINCT rc_ip' ), array( 'rc_user_text' => $user ), $fname ); if ( !$dbr->numRows( $res ) ) { $s = "No results\n"; } else { $s = '<ul>'; while ( ($row = $dbr->fetchObject( $res ) ) != false ) { $s .= '<li><a href="' . $wgTitle->escapeLocalURL( 'ip=' . urlencode( $row->rc_ip ) ) . '">' . htmlspecialchars( $row->rc_ip ) . '</a></li>'; } $s .= '</ul>'; } $wgOut->addHTML( $s ); } function showLog() { global $wgCheckUserLog; if( $wgCheckUserLog === false || !file_exists( $wgCheckUserLog ) ) { # No log return; } else { global $wgRequest, $wgOut; if( $wgRequest->getVal( 'log' ) == 1 ) { # Show the log list( $limit, $offset ) = wfCheckLimits(); $log = $this->tail( $wgCheckUserLog, $limit, $offset ); if( !!$log ) { $scroller = wfViewPrevNext( $offset, $limit, Title::makeTitle( NS_SPECIAL, 'CheckUser' ), 'log=1', count( $log ) < $limit ); $output = implode( "\n", $log ); $wgOut->addHTML( "$scroller\n<ul>$output</ul>\n$scroller\n" ); } else { $wgOut->addHTML( "<p>The log contains no items.</p>" ); } } else { # Hide the log, show a link global $wgTitle, $wgUser; $skin = $wgUser->getSkin(); $link = $skin->makeKnownLinkObj( $wgTitle, 'Show log', 'log=1' ); $wgOut->addHTML( "<p>$link</p>" ); } } } function tail( $filename, $limit, $offset ) { //wfSuppressWarnings(); $file = fopen( $filename, "rt" ); //wfRestoreWarnings(); if( $file === false ) { return false; } $filePosition = filesize( $filename ); if( $filePosition == 0 ) { return array(); } $lines = array(); $bufSize = 1024; $lineCount = 0; $total = $offset + $limit; $leftover = ''; do { if( $filePosition < $bufSize ) { $bufSize = $filePosition; } $filePosition -= $bufSize; fseek( $file, $filePosition ); $buffer = fread( $file, $bufSize ); $parts = explode( "\n", $buffer ); $num = count( $parts ); if( $num > 0 ) { if( $lineCount++ > $offset ) { $lines[] = $parts[$num - 1] . $leftover; if( $lineCount > $total ) { return $lines; } } } for( $i = $num - 2; $i > 0; $i-- ) { if( $lineCount++ > $offset ) { $lines[] = $parts[$i]; if( $lineCount > $total ) { fclose( $file ); return $linMAes; } } } if( $num > 1 ) { $leftover = $parts[0]; } else { $leftover = ''; break; } } while( $filePosition > 0 ); if( $lineCount++ > $offset ) { $lines[] = $leftover; } fclose( $file ); return $lines; } function addLogEntry( $entry ) { global $wgUser, $wg<fonksiyonkaydı>; if ( $wg<fonksiyonkaydı> === false ) { // Kayıt gerekmiyor, bu bir hata değil return true;
} $f = fopen( $wg<fonksiyonkaydı>, 'a' ); if ( !$f ) { return false; } if ( !fwrite( $f, "<li>$entry</li>\n" ) ) { return false; } fclose( $f ); return true; } }
?>
Bu şekilde yazım da PHP tarafından anlaşılacaktır, ancak tavsiye edilmemektedir. Bununla beraber, $x ile $X aynı şeyler değildir, zira değişken isimleri case sensitive'dir.
[değiştir] 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 "<br />"; $opr = new islem(); $opr->carp(5,3); ?>
[değiştir] 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."<br />"); print(\secondSpace\conn_open."<br />"); 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.
[değiştir] 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.
[değiştir] Geliştiriciler
| Önemli PHP Geliştiricileri | |||||
|---|---|---|---|---|---|
| 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. | |||
[değiştir] Ayrıca bakınız
- HTML
- DHTML
- HTML-DOM
- AJAX
- JavaScript
- MySQL
- XHTML
- XML
- CSS (Stil şablonları)
- RSS
- Rasmus Lerdorf
- Andi Gutmans
- Zeev Suraski
[değiştir] Kaynakça
- ^ a b PHP Resmî Web Sitesi
- ^ "The PHP License, version 3.01". 2010-05-20 tarihinde erişilmiştir.
- ^ "GPL-Incompatible, Free Software Licenses". Various Licenses and Comments about Them. Free Software Foundation. 2011-01-03 tarihinde erişilmiştir.
[değiştir] Dış bağlantılar
- PHP Ana Sayfa
- PHP Manuel Türkçe
- PHP Türkiye Grubu
- PHP Kaynak Kılavuzu
- PHP Dersler ve Uygulama Soruları
|
|||||||||||
|
||||||||||||||||||||||||||||||||