İsim alanlarının kullanımı: Temeller

(PHP 5 >= 5.3.0, PHP 7)

İsim alanlarının kullanımından önce PHP'nin kodunuzdaki hangi isim alanlı kodu isteğinizi nasıl anlayabildiğinden bahsetmek gerekir. Bunu daha kolay anlayabilmek için PHP isim alanları ile dosya sistemleri arasındaki benzerlikten yola çıkılabilir. Bir dosya sistemindeki bir dosyaya üç yolla erişilebilir:

  1. fan.txt şeklinde göreli dosya ismiyle. Bu isim dosya sisteminde içinde bulunulan dizin geçerlidizin/ olmak üzere geçerlidizin/fan.txt olarak çözümlenir. Dolayısıyla geçerli dizin /home/veli ise dosya ismi /home/veli/fan.txt olarak çözümlenecektir.
  2. altdizin/fan.txt şeklinde göreli dosya yolu. Bu isim dosya sisteminde içinde bulunulan dizin geçerlidizin/ olmak üzere geçerlidizin/altdizin/fan.txt olarak çözümlenir.
  3. /home/veli/fan.txt şeklinde mutlak dosya yolu. Bu, /home/veli/fan.txt olarak çözümlenir.
Aynı kurallar PHP'deki isim alanlı elemanlara da uygulanabilir. Örneğin bir sınıf ismine üç şekilde başvurulabilir:
  1. $a = new fan(); veya fan::durukyöntem(); gibi bir nitelenmemiş isim veya öneksiz bir sınıf ismi. Eğer geçerli isim alanı ismi geçerlisimalanı ise bu isim, geçerlisimalanı\fan olarak çözümlenir. Eğer kod küresel ve isim alansız ise, isim fan olarak çözümlenecektir. Bir ayrıntı: Eğer isim alanlı işlev ve sabitler tanımlı ise nitelenmemiş isimli işlevler ve sabitler küresel işlevler ve sabitler olarak çözümlenir. Ayrıntılar için İsim alanlarının kullanımı: Son çare olarak küresel işlev ve sabitler bölümüne bakınız.
  2. $a = new altisimalanı\fan(); veya altisimalanı\fan::durukyöntem(); gibi bir nitelenmemiş isim veya öneksiz bir sınıf ismi. Eğer geçerli isim alanı ismi geçerlisimalanı ise bu isim, geçerlisimalanı\altisimalanı\fan olarak çözümlenir. Eğer kod küresel ve isim alansız ise, isim altisimalanı\fan olarak çözümlenecektir.
  3. $a = new \geçerlisimalanı\fan(); veya \geçerlisimalanı\fan::durukyöntem(); gibi tamamen nitelenmiş isim veya küresel önekli bir isim. Bu isim daima kodda belirtildiği gibi geçerlisimalanı\fan olarak çözümlenir.

Üç söz dizimi aşağıda örneklenmiştir:

dosya1.php

<?php
namespace Fan\Fin\altisimalanı;

const 
FAN 1;
function 
fan() {}
class 
fan
{
    static function 
durukyöntem() {}
}
?>

dosya2.php

<?php
namespace Fan\Fin;
include 
'dosya1.php';

const 
FAN 2;
function 
fan() {}
class 
fan
{
    static function 
durukyöntem() {}
}

/* Nitelenmemiş isim */
fan();              // Fan\Fin\fan işlevine çözümlenir
fan::durukyöntem(); // Fan\Fin\fan sınıfının durukyöntem yöntemine çözümlenir
echo FAN;           // Fan\Fin\FAN sabitine çözümlenir

/* Nitelenmiş isim */
altisimalanı\fan(); // Fan\Fin\altisimalanı\fan işlevine çözümlenir
altisimalanı\fan::durukyöntem(); // Fan\Fin\altisimalanı\fan sınıfının
                                 // durukyöntem yöntemine çözümlenir
echo altisimalanı\FAN// Fan\Fin\altisimalanı\FAN sabitine çözümlenir

/* Tamamen nitelenmiş isim */
\Fan\Fin\fan();              // Fan\Fin\fan işlevine,
\Fan\Fin\fan::durukyöntem(); // Fan\Fin\fan sınıfının durukyöntem yöntemine,
echo \Fan\Fin\FAN;           // Fan\Fin\FAN sabitine çözümlenir
?>

Herhangi bir küresel sınıf, işlev veya sabite \strlen(), \Exception veya \INI_ALL gibi tamamen nitelenmiş isimleriyle erişilebileceğine dikkat ediniz.

Örnek 1 - Küresel sınıf, işlev ve sabitlere bir isim alanı içinden erişim

<?php
namespace Fan;

function 
strlen() {}
const 
INI_ALL 3;
class 
Exception {}

$a = \strlen('merhaba');      // strlen küresel işlevini çağırır
$b = \INI_ALL;                // INI_ALL küresel sabitini çağırır
$c = new \Exception('error'); // Exception küresel sınıfını örnekler
?>