PHP 5.3 ile Gelen Yenilikler

PHP 6 çıktı çıkacak bununla beraber sabırsız geliştiriciler için PHP 5.3 versiyonu yayınlandı. PHP6 için planlanan yeniliklerin bir çoğu PHP 5.3'e aktarıldı.

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.

set('fullname', 'Ben Balbo'); $user->save();

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.

$attribute = $value; } public function save() { echo '

Blog user ' . $this->fullname . ' saved

'; } } $user = new MyCompany::Blog::User(); $user->set('fullname', 'Cem Cemoğlu'); $user->save();
$attribute = $value; } public function save() { echo '

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.

 

setUser( $user ); $post->setTitle( $title ); $post->setBody( $body ); $post->save();

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

set('fullname', 'Cem Cemoğlu'); $bloguser->save(); $cmsuser = new CMSUser(); $cmsuser->set('fullname', 'Ahmet Can'); $cmsuser->save();

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 bersion ' . MyCompany::Blog::VERSION . '

'; use MyCompany::Blog; echo '

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:

This is the bundled foo

'; } foo(); // This prints 'This is the bundled foo' This is the global foo

'; } require( 'lib/bundle.class.php'); bundle::foo(); // çıktısı 'This is the bundled foo' foo(); // çıktısı 'This is the global foo'

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.

Yeni yorum ekle