Benzer özelliklere sahip sınıflar bir arada çağırıldığında isim karmaşası çıkabiliyor. Bazen de sınıfların hangi sınıfları içerdiği konusunda karmaşa yaşanabiliyor. Bu gibi karmaşaları önlemek için php ve diğer yazılım dillerinde namespace kullanılmaktadır. Bir diğer tanımlama ise sınıfların etki alanında diyebiliriz. Örneğin bir php dosyası içerisinde birden çok class mevcut, bu klaslara bir namespace ismi tanımladıktan sonra dosya içerisindeki klaslara erişiminiz daha kolay ve pratik olmakta. Dikkat edilmesi gereken husus namespace tanımlamasında php etiketlerin hemen ardından yazılması gerekiyor herhangi bir boşluk açıklama olmamalı.
Örnek bir tanımlama
1 2 3 4 5 6 7 8 9 10 11 12 13 | namespace caglarhoca; //yeni bir namespace ismi tanımladık. class testClass{ //bir class oluşturduk. public function yaz($metin){ //bir metot oluşturduk. echo $metin; } } $sinif=new \caglarhoca\testClass(); $sinif->yaz("Çağlar hoca ile php dersleri."); |
İstenirse namspace tanımlamalarında ön isimde kullanılabilir. Örnek bir tanımlama:
1 2 3 4 5 6 7 8 9 10 11 12 13 | namespace caglarhoca\veritabani; //yeni bir namespace ismi tanımladık. class testClass{ //bir class oluşturduk. public function yaz($metin){ //bir metot oluşturduk. echo $metin; } } $sinif=new \caglarhoca\veritabani\testClass(); $sinif->yaz("Çağlar hoca ile php dersleri."); |
Aynı klasör içerisinde bir den çok namespace tanımlamasıda yapılabilmektedir. Bir namespace in bittiği yerde diğeri başlayacaktır. Örnek bir tanımlama:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | namespace siniflar\class_1; //yeni bir namespace ismi tanımladık. class testClass{ //bir class oluşturduk. public function info(){ //bir metot oluşturduk. echo "siniflar\class_1 testClass"; } } namespace siniflar\class_2; //yeni bir namespace ismi tanımladık. class testClass{ //bir class oluşturduk. public function info(){ //bir metot oluşturduk. echo "siniflar\class_2 testClass"; } } $sinif=new \siniflar\class_2\testClass(); $sinif->info(); |
Yine oluşturulan namespace ler use operatörü ile de çağırılabilmektedir. Use kullanımında namespace ismi belirtildikten sonra yine sınıfın adı da belirtilir. Dikkat edilmesi gereken yer sınıfın sonunda () operatörü bulunmamaktadır ve sınıf tekrardan çağırılmaktadır. Diğer bir husus ise namesapce, use ve class isimleri büyük küçük harfe duyarlıdır. Örnek bir tanımlama
1 2 3 4 5 6 7 8 9 10 11 12 13 | namespace siniflar\class_1; //yeni bir namespace ismi tanımladık. class testClass{ //bir class oluşturduk. public function info(){ //bir metot oluşturduk. echo "siniflar\class_1 testClass"; } } use siniflar\class_1\testClass; $sinif=new testClass(); $sinif->info(); |
Aynı sınıf isimlerinde karmaşayı engellemek için sınıflara as operatörü ile de takma isim verilmektedir. Tabi bu use operatörü ile çağırılıdığında kullanılmaktadır. Örnek bir tanımlama:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | namespace siniflar\class_1; //yeni bir namespace ismi tanımladık. class testClass{ //bir class oluşturduk. public function info(){ //bir metot oluşturduk. echo "siniflar\class_1 testClass"; } } namespace siniflar\class_2; //yeni bir namespace ismi tanımladık. class testClass{ //bir class oluşturduk. public function info(){ //bir metot oluşturduk. echo "siniflar\class_2 testClass"; } } use siniflar\class_1\testClass as sinif_1; use siniflar\class_2\testClass as sinif_2; $sinif1=new sinif_1(); $sinif1->info(); echo "<hr />"; $sinif2=new sinif_2(); $sinif2->info(); |