İsim Alanları


    × Bunları biliyor muydunuz?
"Konsoldan 'php zerocore create-grand-vision' gibi basit bir komutla tüm veritabanı ve tablolarının model dosyasını oluşturabilirsiniz."


İsim alanlarını (namespace) basit anlamda ilgili sınıfın bulunduğu dizini gösteren yapılar olarak tanımlamak mümkündür. Aynı isme sahip iki farklı dosyanın farklı dizinlerde kullanılabilmesinde herhangi bir sakınca yoktur. İsim alanları da sınıflara böyle bir kullanım imkanı sağlar. Yani farklı dizinlerde aynı isme sahip sınıfların çakışmasını önlemek diyebiliriz. Modern sınıf mimarilerinde her bir dosya bir sınıfı içerecek şekilde tasarlanırken isim alanları da dizin bilgisi içerecek şekilde belirlenir. O yüzden konuya "bir dizini gösteren yapı " cümlesi ile giriş yapmayı uygun bulduk. İsim alanlarının daha sonra göstereceğimiz oto yükleme işlemi için ilgili sınıfın konumu bildirmesi açısından ne kadar önemli olduğunu göreceksiniz.

 

 

# Söz Dizimi


İsim alanı bir sınıf dışında fonksiyonların veya sabitlerin yer aldığı dosyalarda da kullanılabilirler. Ancak yaygın olarak sınıf isimlendirmelerinde tercih edilir. İsim alanı namespace deyimi ile belirtilir. İçe içeliği göstermek içinde \ ayracı kullanılır.

<?php namespace Examples\Example;

class ExampleClass
{
    # your codes...
}

 

 

# İsim Alanı (Namespace) Kullanın


Şimdi aşağıdaki dosyada isim alanı içeren bir kullanıma örnek verilmiştir.

Dosya: Example.php
<?php namespace Examples\Example;

class Test
{
    const name = __CLASS__;

    public function run()
    {
         return 'Run Class';
    }
}
Dosya: index.php
<?php require 'Example.php';

$test = new Examples\Example\Test;

echo $test::name;
echo $test->run();
Examples\Example\Test
Run Class

 

 

# İsim Alanının Bildirilmesi


Yukarıdaki kullanımda dikkat edilirse isim alanı ile sınıfı tanımladık.Aynı sınıfın birden fazla kez kullanımında aynı tanımlamayı tekrar tekrar yapmak işi biraz zorlaştırır. Bu durumu aşmak için isim alanı use deyimi ile kullanılacak dosyada belirtilmesi gerekir.

<?php require 'Example.php';

use Examples\Example\Test;

$test = new Test;

echo $test::name;
echo $test->run();
Examples\Example\Test
Run Class

 

 

# Takma İsim Kullanımı


Dosyaya bildirilen isim alanına istenirse takma isimde verilebilir. Bunun için as deyimi kullanılır.

<?php require 'Example.php';

use Examples\Example\Test as T;

$test = new T;

echo $test::name;
echo $test->run();
Examples\Example\Test
Run Class

Takma isim verildikten sonra artık orijinal ismi ile çağrımda bulunamazsınız.

 

 

# Farklı İsim Alanına Sahip Sınıfların Kullanımı


İsim alanına sahip bir sınıfta farklı bir sınıf kullanılırken mutlaka use ile bildirilmelidir. Alternatif olarak kullanılan sınıf isminin başına \ sembolü getirilerek kullanılması gerekir.

Dosya: Example.php
<?php namespace Examples\Example;

use Test2;

class Test
{
    const name = __CLASS__;

    public function run()
    {
         return Test2::run();
    }
}

Eğer çağrılan sınıf isim alanı içeriyorsa isim alanı ile birlikte bildirilmelidir.

<?php namespace Examples\Example;

use Examples2\Example\Test2;

class Test
{
    const name = __CLASS__;

    public function run()
    {
         return Test2::run();
    }
}

 

 

# Aynı İsim Alanına Sahip Sınıfların Kullanımı


Aynı isim alanına sahip dosyalara ait nesnelerin bir bir birleri içerisinde kullanılmaları sırasında use ile bildirilmelerine gerek yoktur..

Dosya: Example.php
<?php namespace Examples\Example;

class Test2
{
    public static function run()
    {
        return 'Run Class';
    }
}

class Test
{
    const name = __CLASS__;

    public function run()
    {
         return Test2::run();
    }
}

 

 

# Aynı İsimli Sınıfların Kullanımı


Farklı isim alanlarına rağmen aynı isimli sınıfları bir biri içerisinde kullanırken dikkat etmek gerekir. İsim alanı içeren bir sınıfa isim alanı içermeyen aynı isimli sınıf dahil edilirken ya takma isim verilmeli ya da \ sembolü ile öncelenmelidir.

<?php namespace Examples\Example;

class Test extends \Test
{
    const name = __CLASS__;

    public function run()
    {
         return 'Run Class';
    }
}

Ya da takma isim ile belirtilmelidir.

<?php namespace Examples\Example;

use Test as T;

class Test extends T
{
    const name = __CLASS__;

    public function run()
    {
         return 'Run Class';
    }
}