SSS: İsim alanları hakkında bilinmesi gerekenler
  
  (PHP 5 >= 5.3.0, PHP 7, PHP 8)
  
   Bu SSS iki bölüme ayrılır: genel sorular ve isim alanlarını tamamen
   anlamaya yardımcı olacak gerçeklenime özgü ayrıntılar.
  
  
   Önce genel sorularla başlıyoruz.
   
    - 
     
      İsim alanlarını
        kullanmayacak olsam bile bu konuyla yine de ilgilenmeli miyim?
     
    
- 
     
      Yerleşik ve
      küresel sınıfları bir isim alanı içinde nasıl kullanabilirim?
     
    
- 
     
      İsim alanlarının
      sınıflarını, işlevlerini ve sabitlerini kendi isim alanlarında nasıl
      kullanabilirim?
     
    
- 
     
      \bir\isimveya\isimgibi bir isim nasıl çözümlenir?
- 
     
      bir\isimgibi bir isim nasıl çözümlenir?
- 
     
      isimgibi bir nitelenmemiş sınıf ismi nasıl çözümlenir?
- 
     
      isimgibi bir nitelenmemiş işlev veya sabit ismi nasıl çözümlenir?
   İsim alanları gerçeklenimini tamamen anlamaya yardımcı olacak
   gerçeklenime özgü bir kaç ayrıntı vardır.
   
    - 
     
      İthal edilen isimler
      aynı dosyada tanımlı sınıflarla çelişmemelidir.
     
    
- 
     
      İç içe isim alanlarına
      izin verilmez.
     
    
- 
     
      Dinamik isim alanları
      isimlerinin (tırnak içine alınmış betimleyiciler) içindeki
      tersbölülerin öncelenmesi gerekir.
     
    
- 
     
      Tersbölü
      kullanılarak atıf yapılan tanımsız sabitler ölümcül hataya sebep
      olur.
     
    
- 
     
      Özel null,trueveyafalsesabitleri geçersiz kılınamaz.
   İsim alanlarını kullanmayacak olsam bile bu konuyla yine de
     ilgilenmeli miyim?
   
    Hayır. Ne isim alanları mevcut koddan etkilenir ne de isim alanlarını
    içermeyen kodlar isim alanlarından etkilenir. İsterseniz kodu böyle
    yazabilirsiniz:
   
   
    
     Örnek 1 - Küresel sınıflara bir isim alanı dışından erişim
     
<?php
$a = new \stdClass;
?>
      
     
   
   
    Bu kod şuna eşdeğerdir:
   
   
    
     Örnek 2 -  Küresel sınıflara bir isim alanı dışından erişim
     
<?php
$a = new stdClass;
?>
      
     
   
   
  
   Yerleşik ve küresel sınıfları bir isim alanı içinde nasıl
     kullanabilirim?
   
    
     Örnek 3 - İsim alanı içinden yerleşik sınıflara erişim
     
<?php
namespace fan;
$a = new \stdClass;
function test(\ArrayObject $bağımsız_değişken_türü_örneği = null) {}
$a = \DirectoryIterator::CURRENT_AS_FILEINFO;
// Bir yerleşik veya küresel sınıfın genişletilmesi
class MyException extends \Exception {}
?>
      
     
   
   
  
   İsim alanlarının sınıflarını, işlevlerini ve sabitlerini kendi
     isim alanlarında nasıl kullanabilirim?
   
    
     Örnek 4 - İsim alanındaki dahili sınıf, işlev ve sabitlere erişim
     
     
<?php
namespace fan;
class Sınıfım {}
// bağımsız değişken türü olarak geçerli isim alanındaki bir sınıfın kullanımı
function dnm(Sınıfım $bağımsız_değişken_türü_örneği = null) {}
// bağımsız değişken türü olarak geçerli isim alanındaki bir sınıfın başka
// bir yolla kullanımı
function dnm(\fan\Sınıfım $bağımsız_değişken_türü_örneği = null) {}
// geçerli isim alanındaki bir sınıfın genişletilmesi
class AltSınıfım extends Sınıfım {}
// bir küresel işleve erişim
$a = \küreselişlev();
// bir küresel sabite erişim
$b = \INI_ALL;
?>
      
     
   
   
  
   \bir\isim veya \isim gibi bir isim nasıl
     çözümlenir?
   
    \ ile başlayan isimler daima yazıldıkları gibi
    çözümlenirler, bu bakımdan \bir\isim aslında
    bir\isim'dir; \Exception da aslında
    Exception'dır.
    
     Örnek 5 - Tamamen nitelenmiş isimler
     
<?php
namespace fan;
$a = new \bir\isim(); // "bir\isim" sınıfını örnekler
echo \strlen('hi');   // "strlen" işlevini çağırır
$a = \INI_ALL;        // $a değişkenine "INI_ALL" sabitinin değeri atanır
?>
      
     
   
   
  
   bir\isim gibi bir isim nasıl çözümlenir?
   
    Bir tersbölü içeren, ancak tersbölü ile başlamayan bir\isim
    gibi isimler iki farklı yolla çözümlenebilir.
   
   
    bir ismini başka bir isimle ithal eden bir deyim varsa bu
    takma isim bir\isim içindeki bir'e uygulanır.
   
   
    Aksi takdirde, bir\isim isminin önüne geçerli isim alanı
    adı getirilir.
   
   
    
     Örnek 6 - Nitelenmiş isimler
     
<?php
namespace fon;
use fan\fin as fon;
$a = new bir\isim(); // "fon\bir\isim" sınıfını örnekler
fon\bar::isim(); // "fan\fin\bar" sınıfının "isim" statik yöntemi çağrılır
bir\bar();        // "fon\bir\bar" işlevi çağrılır
$a = bir\BAR;    // $a değişkenine "fon\bir\BAR" sabitinin değeri atanır
?>
      
     
   
   
  
   isim gibi bir nitelenmemiş sınıf ismi nasıl
     çözümlenir?
   
    isim gibi tersbölü içermeyen sınıf isimleri 2 farklı yolla
    çözümlenebilir.
   
   
    isim ismini başka bir isimle ithal eden bir deyim varsa bu
    takma isim isim'e uygulanır.
   
   
    Aksi takdirde, isim ismininin önüne geçerli isim alanı
    getirilir.
   
   
    
     Örnek 7 - Nitelenmemiş sınıf isimleri
     
<?php
namespace fon;
use fan\fin as fon;
$a = new isim(); // "fon\isim" sınıfı örneklenir
fon::isim();     // "fan\fin" sınıfının "isim" statik yöntemi çağrılır
?>
      
     
   
   
  
   isim gibi bir nitelenmemiş işlev veya sabit ismi
     nasıl çözümlenir?
   
    isim gibi tersbölü içermeyen işlev ve sabit isimleri 2
    farklı yolla çözümlenebilir.
   
   
    Önce isim isminin önüne geçerli isim alanı ismi getirilir.
   
   
    Son olarak, eğer isim alanında isim diye bir işlev veya
    sabit yoksa ve isim diye bir küresel işlev veya sabit varsa
    küresel alandaki kullanılır.
   
   
    
     Örnek 8 - Nitelenmemiş işlev veya sabit isimleri
     
<?php
namespace fon;
use fan\fin as fon;
const FON = 1;
function bir() {}
function fon() {}
function sort(&$a)
{
    \sort($a); küresel "sort" işlevi çağrılıyor
    $a = array_flip($a);
    return $a;
}
bir(); // "fon\bir" çarılır
$a = strlen('hi');  // "fon\strlen" mevcut olmadığından küresel
                    // "strlen" işlevi çağrılır
$arr = array(1,3,2);
$b = sort($arr);    // "fon\sort" işlevi çağrılır
$c = fon(); // "fon\fon" işlevi çağrılır - ithal işlemi uygulanmaz
$a = FON;     // $a değişkenine "fon\FON" sabitinin değeri
              // atanır - ithal işlemi uygulanmaz
$b = INI_ALL; // $b değişkenine "INI_ALL" küresel sabitinin değeri atanır
?>
      
     
   
   
  
   İthal edilen isimler aynı dosyada tanımlı sınıflarla
    çelişmemelidir.
   
    Aşağıdaki iki betik birlikte kurallara uygundur:
    
   
   
    Sınıfım sınıfı bir\isim isim alanında mevcut
    olduğu halde Sınıfım ayrı bir dosyada tanımlandığından
    herhangi bir isim çakışması olmaz. Ancak, sonraki örnekte,
    Sınıfım sınıfı use deyimi ile aynı dosyada
    tanımlandığından isim çakışmasından dolayı ölümcül hata oluşur.
    
   
   
  
   İç içe isim alanlarına izin verilmez.
   
    PHP isim alanlarının böyle iç içe tanımlanmasına izin vermez:
    
    Bununla birlikte, isim alanlarını birbirinin içinde şöyle tanımlamak
    mümkündür:
    
   
   
  
   Dinamik isim alanları isimlerinin (tırnak içine alınmış
     betimleyiciler) içindeki tersbölülerin öncelenmesi gerekir.
   
    Tersbölü imi dizgelerin içinde bir önceleme karakteri olarak
    kullanıldığından çift tırnaklar arasına alınmış bir dizge içindeki bir
    tersbölü karakterinin tersbölü ile öncelenmesi gerekir. Aksi takdirde,
    istenmeyen durumlar ortaya çıkabilir:
    
     Örnek 9 - İsim alanlı isimleri çift tırnaklar arasında kullanmak
       tehlikelidir
     
      <?php
$a = "tehlikeli\nesne"; // \n, çift tırnaklı dizge içinde
                            // satırsonu karakteridir!
$obj = new $a;
$a = 'bu\tamamen\tehlikesiz\nesne'; // burada sorun yok.
$obj = new $a;
?>
      
     
    Tersbölüleri tek tırnakları arasına alınmış bir dizge içinde kullanmak
    daha güvenli olsa da her iki dizge türünde de tersbölüleri öncelemek en
    güvenlisidir.
   
  
 
  
   Tersbölü kullanılarak atıf yapılan tanımsız sabitler ölümcül
     hataya sebep olur.
   
    FAN gibi nitelenmemiş olarak tanımsız sabitlere
    rastlandığında PHP, bunun FAN değerli bir sabit
    varsayıldığını belirten bir uyarı üretecektir. İster nitelenmiş olsun
    ister tamamen nitelenmiş olsun tanımsız bir sabit daima ölümcül hataya
    sebep olur.
    
     Örnek 10 - Tanımsız sabitler
     
      <?php
namespace bar;
$a = FAN;  // uyarı üretir - "FAN" sabit olarak tanımsız olduğundan
           // bir sabit ismi değil, bir sabit değer olarak ele alınır.
$a = \FAN;     // ölümcül hata, isim alanlı tanımsız sabit: FAN
$a = Fin\FAN;  // ölümcül hata, isim alanlı tanımsız sabit: bar\Fin\FAN
$a = \Fin\FAN; // ölümcül hata, isim alanlı tanımsız sabit: Fin\FAN
?>
      
     
   
   
  
   Özel null, true veya false
     sabitleri geçersiz kılınamaz.
   
    Bir özel, yerleşik sabiti bir isim alanlı sabit olarak tanımlamaya
    kalkışmak ölümcül hatayla sonuçlanır.
    
     Örnek 11 - Tanımsız sabitler
     
      <?php
namespace bar;
const NULL = 0;       // ölümcül hata;
const true = 'ahmak'; // bu da ölümcül hata;
// etc.
?>