PHP Haziran 2009 da yayınlanan 5.3 sürümü ile büyük bir yol katetmiş oldu. 5.0 versiyonuna kadar köklü vede büyük değişiklikler görememiştik, fakat 5.3 sürümünde yeni nesil programlama dillerinin en önemli özelliklerinden olan namespaceler ile çalışma ve PHP projelerinizde object oriented yapısını kullanma imkanı sunuyor. OOP desteği php ye daha önceden eklenmiş olsada namespace desteği 5.3 versiyonu ile geliyor. [...]
C++, Java yada ASP.NET de kullanılan herhangi bir dil ile kodlama yapan yazılımcılar namespace'lerin nimetlerinden yararlanırken, biz PHP programcıları uzun class tanımlamaları ile yapımızı namespacelere benzetmeye çalışırdık.
Class isimlendirilirken, ismin amacı yansıtması önemlidir. Doğru bir şekilde tanımlandığında isim çakışması oluşmaması garanti altına alınmış olunur. Ne yazıkki bu isimlendirmeler fazlası ile uzun ve de ekstra bir getirisi yoktur.
Örneğin
Zend_Service_DeveloperGarden_Response_ConferenceCall_CreateConferenceResponseType
Class'ını Zend Framework içerisinde bulabilirsiniz. 81 karakter ile Zend'in kendi programlama standardını kendisi kırdığını görüyoruz. Üstelik bu Zend Framework deki en uzun class ismide değil.
Namespace'lerin daha kısa class isimleri dışında aşağıda olduğu gibi başka getirileride mevcut.
CODE:
<?php
namespace EpixaService;
use EpixaModelArticleModel,
EpixaModelAuthorModel;
class ArticleService extends AbstractService
{
/**
* @param string $title
* @param AuthorModel $author
* @return ArticleModel
*/
public function create($title, AuthorModel $author)
{
$article = new ArticleModel();
$article->title = $title;
$article->author = $author;
return $article;
}
}
Namespace tanımlarken aynı zamanda tanmlanan sınıfın ne çeşit bir sınıf olduğu belirtilebilir. Yukarıdaki örnek tanımlanan class'ın Epixa namespace'i içerisinde çalışacak bir servis olacağını belittik.
Basit bir namespace tanımyla birlikte, dosyamızda diğer namespace'leride kullanabiliriz. Biz bu örnekte ArticleModel and AuthorModel sınıflarını dosyamıza dahil etmeyi tercih ettik. Böylece EpixaModel namespace'ini basit birşekilde kullanmaya hazır hale getirdik. Dilediğimizde namespace içerisinde yer alan tüm modeller için instance yaratabiliriz. Fakat kullanmayı düşündüğüm özel modelleri eklemenin en iyi yolu miras alarak bir class yaratmaktır.
Örnekte
CODE:
class ArticleService extends AbstractService {
satırı ile miras alarak bir class yaratmış olduk.
Bu noktada türünü ve bağımlıklarını bildiğimiz bir class yaratmış olduk. Böylece daha profesyönel ve temiz kodlar yazmanın önündeki engelleri kadırmış olduk.
Dia
okanatabag@gmail.com
5 Aralik 2010 09:21