PHP 5.3 ile Gelen Yenilikler
PHP6'nın yeni özelliklerini kullanmak isteyen geliştiriciler için PHp 5.3'ün duyurulması güzel bir haber. Ancak hosting firmalarının hemen PHP6'ya geçeceklerini düşünmüyorum. PHP6'nın bir süre test edilip stabil hale gelmesini bekleyeceklerdir. Çoğu hosting firması muhtemelen PHP6'ya geçmek için PHP 6.1 versiyonunu bekleyeceklerdir. PHP6 ile gelen özelliklerin birçoğunu kullanmak için ise PHP 5.2'den PHP 5.3'e update daha kolay olacaktır.
Bu makalemizde PHP 5.3 ile gelen yeni özellikleri anlatıp, örnekler vermeye çalışacağız. Burada PHP 5.3'ün kurulumunu veya yükseltmesini anlatmayacağız. Anlatacağımız kodları denemek istiyorsanız PHP 5.3'ün olduğu bir alanda bu denemeleri yapmanız gerekecektir.
namespace
Nesneye dayalı programlamadan (Object Oriented Programming) önce çoğu uygulama geliştirici, çakışmaları önlemek için fonksiyon isimlerinde kendilerine göre ön ekler kullanıyorlardır. Örneğin wordpress fonksiyonlar genellikle wp_ ile başlar ve böylece diğer fonksiyonlar ile çakışmalar önlenmiş olur.
Nesyene dayalı programlama dünyasında isim çakışmaları biraz daha az oluyor. Aşağıdaki örnekte de göreceğiniz gibi nesne içindeki fonksiyonlar, nesne dışında ve diğer nesnelerde tanımlanan fonksiyonlar ile çakışmaz.
Yukarıdaki örnekte, User adında bir sınıf oluşturduk ve bu sınıf içinde de set ve save adında iki tane fonksiyon tanımladık. save fonksiyonu diğer hiçbir save fonksiyonu ile çakışmayacaktır, sadece User class'ı içinden bu metod'a erişilebilir. Ancak burada başka bir var! Tanımlanan User sınıfı başka bir yerde de tanımlanırsa sorun olacaktır. Aynı isimle birden fazla sınıf tanımlanamıyor. Bu tarz durumları önlemek için PHP 5.3 ile gelen namespace anahtar kelimesini kullanıyoruz.
Yukarıda aynı isme sahip iki sınıf tanımladık. Sınıfları namespace'ler ile bir birinden ayırdık. Bu sınıflar aşağıdaki şekilde ayrı ayrı çağrılabilir.
Blog user ' . $this->fullname . ' saved
'; } } $user = new MyCompany::Blog::User(); $user->set('fullname', 'Cem Cemoğlu'); $user->save();CMS user ' . $this->fullname . ' saved
'; } } $user = new MyCompany::Blog::CMS(); $user->set('fullname', 'Ahmet İyibilir'); $user->save();use
PHP 5.3 ile gelen yeniliklerden biri de use anahta sözcüğüdür. namespace kullanıyorsanız bir sınıfı çağırmak için yukarıdaki örnekte gösterildiği gibi her seferinde namespace adını yazmanız gerekiyor. use ile namespace'li sınıfları çok daha kolay çağırabilirsiniz. İlk örnek use kullanmadan ikinci örnek ise aynı işi yapan kodun use kullanılmış versiyonudur.
Namespace Alias
Yukarıda namespace kullanarak aynı isme sahip sınıf oluşturmanın nasıl yapılacağından ve bunun çakışmaları önleyeceğinden bahsetmiştik.Aynı isme sahip sınıfları aynı kod içinden çağırmak bazen karışıklıa sebeb olabilir, bu karışıklığı önlemek için namespace'ler için alias yani takma isim kullanabilirsiniz. Namespace Alias örneği
Class Constants - Sınıf Sabitleri
PHP 5.3 ile sınıf içinde sabit tanımı yapılabiliyor. Eğer namespace kullanmışsanız bu sabit tanımlarına sınıf dışından da erişilebiliyor, ancak sabitlere doğrudan sınıf ile erişilmiyor. İşte örneğimiz;
Blog version ' . Blog::VERSION . '
'; use MyCompany::Blog::VERSION as Foo; echo 'Blog version ' . Foo . '
'; /*Yukarıdaki kodun çıktısı: Blog version 1.0.0 Blog version 1.0.0 Blog version Foo*/Fonksiyonlar için namespace
Statik sınıflara ait metodlar artık kulanılmıyor onun yerine namespace ile fonksiyonlar tanımlayabilirsiniz. Örnek kullanım:
Yukarıda açıklamaya çalıştığımız PHP 5.3'ün özelliklerine ait tüm listeyi buradan edinebilirsiniz.
PHP 5.3'e geçerken dikkat edilmesi gereken noktalardan bazıları;
- call_user_method() yerine use call_user_func() kullanılmalı
- call_user_method_array() yerine use call_user_func_array() kullanılmalı
- define_syslog_variables() kullanılmamalı
- ereg() yerine preg_match() kullanılmalı.
- ereg_replace() yerine preg_replace() kullanılmalı.
- eregi() yerine preg_match() i parametresi ile kullanılmalı
- eregi_replace() yerine preg_replace() kullanılmalı
- session_register(), session_unregister(), session_is_registered() gibi oturum değişkenleri yerine $_SESSION kullanılmalı
- set_socket_blocking() yerine stream_set_blocking() kullanılmalı
- split() yerine preg_split() kullanılmalı
- spliti() yerine preg_split() iparametreli kullanılmalı
- mysql_db_query() yerine mysql_select_db() ve mysql_query() kullanılmalı
- mysql_escape_string() yerine SQL'e birşeyler kayıt ederken özel karakterlerden kaçmaya yarayan mysql_real_escape_string() kullanılmalı
PHP 5.2x'ten PHP 5.3x'e geçiş için php.net'deki dokümanlar upgrade için faydalı olabilir.
PHP 5.3 ile uygulama geliştirirken dikkat edilmesi gereken sizin ekleyeceğiniz başka noktalar var mıdır? Lütfen deneyimlerinizi paylaşın.

Yorumlar
Teşekkürler.
Sal, 24/05/2011 - 11:21 — tatilTeşekkürler.
Yeni yorum ekle