PHP ve NameSpace Kullanımı

Standard

Merhaba arkadaşlar,

Bugün hayatımıza php 5.3 ile birlikte giren bir yeniliği geçte olsa size bahsetmek isterim. NameSpace yani yani İsim Alanları..
Peki neye yarar? PHP’de benzer isimdeki class,constant ve function’ları aynı sayfa/proje içerisinde kullanmamızı sağlar ve daha okunabilir ve anlamlı object mimarileri kurmamızı sağlar. Windows File System olarak kafanızda canlandırabilirsiniz. C:\Onur\test.txt dosyasını düşünelim; aynı dosyadan bir tane daha koymamız durumunda hata verecektir ve üzerine yazacaktır ama C:\Tester\test.txt şeklinde koyarsak aynı sürücüde farklı dizinlerde aynı isimde farklı dosyalar olabilir. İşte buradaki Onur ve Tester dizinlerini namespace gibi canlandırabilirsiniz gözünüzde.

Heman bir örnek ile somutlaştırmak istiyorum;

<?php
######----ONUR CANALP----####
##         NAMESPACES      ##
##         25.07.2013      ##
#############################

// "Personel" isminde bir namespace tanımlıyorum.
namespace Personel;

// "Personel" namespace'i içinde "Temizlik" sınıfı oluşturuyorum.
Class Temizlik
{
    // "Temizlik" sınıfı içinde "oku" isminde bir fonksiyon oluşturuyorum.
    public function oku()
    {
        return 'Personel namespace içindeki Temizlik çalışanları';
    }
}

Class Teknik
{
    // "Feed" sınıfı içinde "oku" isminde bir fonksiyon oluşturuyorum.
    public function oku()
    {
        return 'Personel namespace içindeki Teknik çalışanlar';
    }
}

// "Yoneticiler" isminde bir namespace tanımlıyorum.
namespace Yoneticiler;

// "Yoneticiler" namespace'i içinde "Temizlik" sınıfı oluşturuyorum.
Class Temizlik
{
    // "Temizlik" sınıfı içinde "oku" isminde bir fonksiyon oluşturuyorum.
    public function oku()
    {
        return 'Yöneticiler namespace içindeki Temizlik çalışanlar';
    }
}

Class Teknik
{
    // "Teknik" sınıfı içinde "oku" isminde bir fonksiyon oluşturuyorum.
    public function oku()
    {
        return 'Yöneticiler namespace içindeki teknik çalışanlar';
    }
}

// "Personel" namespace'i içinde bulunan "Temizlik" Sınıfını tanımlıyorum.
$temizlik1 = new \Personel\Temizlik;
// "Temizlik" namespace'i içinde bulunan "Temizlik" Sınıfını tanımlıyorum.
$temizlik2 = new \Yoneticiler\Temizlik;

// "Personel" namespace'i içinde bulunan "Teknik" Sınıfını tanımlıyorum.
$teknik1 = new \Personel\Teknik;
// "Temizlik" namespace'i içinde bulunan "Teknik" Sınıfını tanımlıyorum.
$teknik2 = new \Yoneticiler\Teknik;

// Sınıfların içinde bulunan fonksiyonları çağırıyoruz ve sonucu ekrana basıyoruz.
echo '<p>' . $temizlik1->oku() . '</p>';
echo '<p>' . $temizlik2->oku() . '</p>';
echo '<p>' . $teknik1->oku() . '</p>';
echo '<p>' . $teknik2->oku() . '</p>';

?>

Kaynak kod için: https://github.com/onurcanalp/PHP/blob/master/namespaces.php

Mevcut namespace öğrenmenın varmı bir yolu?

Elbette bu cevabı vermek için az önceki saçma soruyu sordum 🙂

__NAMESPACE__ constant işinizi görür..

<?php
namespace MyProject\Database;

// 'MyProject\Database'
echo __NAMESPACE__;

Aslında namespace türetme vb. daha detaylı işlemlerde var ama onları siz keşfedin yazmaya şu an üşendim, belki ilerde.. Hem ben ışığı gösterdim 🙂

Kolay gelsin…

6 thoughts on “PHP ve NameSpace Kullanımı

  1. namespace

    Fatal error: Namespace declaration statement has to be the very first statement in the script in…

    diye uzayıp giden bu hata canımı sıkmaya başladı…
    Farklı bir projeyi incelediğimde adamlar namespace kullanmış ve kodların altınada dosyayı include etmişler.. üstüne baktığın zaman bir sürü kod var ama dosya takır takır çalışıyor. Aynı sistemi ben kuruyorum namespace ilk ifade olmalıdır… şeklinde garip bir hata veriyor. Yani namespace daima sayfanın en tepesinde olamaz ki? zaten kendi sayfası içinde en üstte ama include edildiği zaman hata veriyor? Kafa durdu 🙂 bu konuda beni aydınlatırmısın dostum.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir