Php 5.3 Namespace ler
October 1st, 2009
Bir uygulama nekadar büyür, nekadar cok yazar o uygulamada calisirsa, nekadar degisik tür kodlar, kütüphaneler kullanilirsa okadar cok isim cakismasi ola bilir.
En büyük örnegi php 5.1.0 cikmasindan bir kac gün sonra php 5.1.1 cikmasiyle görüldü, bunun nedeni php 5.1.0 da yeni Date adinda bir sinif bulunmasiydi.
Bircok Pear kullanicisi update den sonra Fatal Error larla karsilasmisdi cünki Pear inde Date Sinifi vardi.
Böyle bir cakismadan kacinmak icin simdiye kadar Zend Framework de oldugu gibi Uzun isimler kullanildi (Zend_Controller_Action).
Php 5.3 ile bu uzun isimlerdende kurtulmak mümkün.
php dünyasininen en uzun süre tartisilan seperator u kesinlikle namespace seperator oldu.
Asil cif iki nokta üstüste (::) kullanilicakti ama php dünyasinda cif anlamli olur diye sonunda (\) Backslah isaretinde karar kilindi.
Namespace kullana bilmek icin, php dosyasinda ilk ifade namespace
mesela:
-
<?php
-
namespace Skorp;
-
echo "skorp.eu";
Bir namespace bircok dosyayi kapsiya bilir. Dosyalarin her biri ayni namespace i beyan etmeleri gerekir. Asagidaki örnekde göründügü gibi, bir dosya icinde birden cok namespace bulunmasinada izin veriliyor.
Ama asagidaki örnege izin verilmiyor, en az bir namespace beyan edilmisse onun disinda herhangi bir kod olamaz.
alinan hata mesaji:
Fatal error: No code may exist outside of namespace {} in
Bir örnek ile namespaceleri nasil kullanacagimizi bakalim.
-
<?php
-
namespace Skorp
-
{
-
class Test {}
-
}
-
-
namespace Foo
-
{
-
class Test{}
-
}
-
-
namespace Bar
-
{
-
}
Bar namespace i icinde Foo namespacindeki Test sinifini olusturuyoruz.
var_dump satirini su sekilde yazmis olsaydik:
söyle bir hata ile karsilasicaktik.
Fatal error: Class 'Bar\Foo\Test' not found in
Bundan Adreslemeye dikkat etmemizi cikartiyoruz, normal bilgisyardaki Dosya Yapisi gibidir namespace de basta \ isareti yoksa kendi namespace icinde ara o sinifi.
Alias Mekanizmasi
Herzaman \Foo\Test veya daha uzayan satirlar kullanmamak icin Alias mekanismasini kullana biliriz.
-
namespace Bar
-
{
-
use Foo\Test as anton;
-
}
daha kisa yazmak icin
-
namespace Bar
-
{
-
use Foo\Test;
-
}
Bu kisa yöntemde en son bilesen adi kullanilir alias olarak yani bizim örnegimizde Test
dikkat edilmesi gereken birsey daha var alias mekanizmasini kullanirken \ yazmamiza gerek yok, php burda sinif adinin tam yolunu bilmek istiyor.
Fonksiyonlarda bilinmesi gereken ise, onlara birer Alias veremiyoruz, ondan fonksiyonun tüm adini yazmak gerekiyor.
yazilan fonksiyonlar ilk önce kullanilan Namespace icerisinde aranmaktadir, eger orada bulunmadiysa, global Namespace de aranir.
Mesela strlen adinda bir fonksiyonumuz varsa ama biz php nin bize sunmus oldugu strlen fonksiyonunu kullanmak istiyorsak ozaman basina bir \ koymamiz gerekiyor
son olarakda hangi namespace de oldugumuzu görmek icin _NAMESPACE_ Konstansini cagara bilirsiniz.
Categories: PHP








[...] – Düsen ve istenmeyen özellikler – Migrasyon sorunlari – yeni Fonksiyonlar – genisletilen Fonksiyonlar – Windows destegi – Namespace [...]