array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'tr', ), 'this' => array ( 0 => 'language.namespaces.rules.php', 1 => 'İsim çözünürlük kuralları', ), 'up' => array ( 0 => 'language.namespaces.php', 1 => 'İsim Alanları', ), 'prev' => array ( 0 => 'language.namespaces.fallback.php', 1 => 'İsim alanlarının kullanımı: son çare olarak küresel işlev ve sabitler', ), 'next' => array ( 0 => 'language.namespaces.faq.php', 1 => 'SSS: İsim alanları hakkında bilinmesi gerekenler', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'tr', 'path' => 'language/namespaces.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
İsim çözünürlük kurallarının amaçları gereği bazı önemli tanımlar:
Fan
gibi bir isim alanı ayracı içermeyen bir betimleyici.
Fan\Fin
gibi bir isim alanı ayracı içeren bir
betimleyici.
\Fan\Fin
gibi bir isim alanı ayracı ile başlayan isim
alanı ayraçlı bir betimleyici. \Fan
isim alanı da
tamamen nitelenmiş bir isimdir.
namespace\Fan\Fin
gibi namespace
ile
başlayan bit tanımlayıcıdır.
İsimler şu kurallara göre çözümlenir:
new \A\B
deyimi
A\B
sınıfı olarak çözümlenir.
namespace\
öneki geçerli
isim alanı ile değiştirilerek çözümlenir. Eğer isim küresel isim
alanındaysa namespace\
öneki konmaz. Örneğin,
X\Y
isim alanındaki namespace\A
,
X\Y\A
olarak çözümlenirken aynı isim küresel isim
alanı içindeyse A
olarak çözümlenir.
A\B\C
isim
alanı C
olarak ithal edilmişse
C\D\E
ismi A\B\C\D\E
ismine
dönüştürülür.
A\B
isim alanınındaki bir C\D\E
ismi A\B\C\D\E
ismine dönüştürülecektir.
use A\B\C;
sonrasında new C()
gibi bir kullanım A\B\C()
olarak çözümlenir. benzer
şekilde, use function A\B\fan;
sonrasında
fan()
gibi bir kullanım A\B\fan
ismine dönüştürülür.
A\B
isim alanındaki new C()
bildirimi
A\B\C
ismine çözümlenir.
A\B
isim alanında olduğunu
varsayalım, fan()
işlev çağrısı şöyle gerçekleşir:
A\B\fan()
işlevi aranır.
fan()
işlevi bulunmaya ve çağrılmaya çalışılır.
Örnek 1 - Örneklerle İsim Çözünürlüğü
<?php
namespace A;
use B\D, C\E as F;
// işlev çağrıları
fan(); // Varsa "A" isim alanında tanımlı "fan", yoksa küresel "fan"
\fan(); // Küresel alanda tanımlı "fan" çağrılır
my\fan(); // "A\my" isim alanında tanımlı "fan" çağrılır
F(); // Varsa "A" isim alanında tanımlı "F", yoksa küresel "F"
//sınıf adı çağrıları
new B(); // Varsa "A" isim alanında tanımlı "B" örneklenir
// Yoksa "A\B" sınıfı otomatik olarak yüklenmeye çalışılır
new D(); // ithal kuralları ile, "B" isim alanında tanımlı "D" örneklenir
// yoksa "B\D" sınıfı otomatik olarak yüklenmeye çalışılır
new F(); // ithal kuralları ile, "C" isim alanında tanımlı "E" örneklenir
// yoksa "C\E" sınıfı otomatik olarak yüklenmeye çalışılır
new \B(); // Varsa küresel alanda tanımlı "B" örneklenir
// yoksa "B" sınıfı otomatik olarak yüklenmeye çalışılır
new \D(); // Varsa küresel alanda tanımlı "D" örneklenir
// yoksa "D" sınıfı otomatik olarak yüklenmeye çalışılır
new \F(); // Varsa küresel alanda tanımlı "F" örneklenir
// yoksa "F" sınıfı otomatik olarak yüklenmeye çalışılır
// başka bir isim alanından statik yöntem/isim alanı işlevleri
B\fan(); // "A\B" isim alanında tanımlı "fan" çağrılır
B::fan(); // "A" isim alanında tanımlı "B" sınıfının "fan" yöntemi çağrılır
// "A\B" sınıfı yoksa, "A\B" otomatik yüklenmeye çalışılır
D::fan(); // ithal kuralları ile, "B" isim alanında tanımlı "D" sınıfının
// "fan" yöntemi çağrılır; "B\D" sınıfı yoksa, "B\D"
// otomatik yüklenmeye çalışılır
\B\fan(); // "B" isim alanında tanımlı "fan" çağrılır
\B::fan(); // Küresel alandaki "B" sınıfının "fan" yöntemi çağrılır
// "B" sınıfı yoksa, "B" otomatik yüklenmeye çalışılır
// geçerli isim alanının statik yöntemleri ve isim alanı işlevleri
A\B::fan(); // "A\A" isim alanında tanımlı "B" sınıfının "fan" yöntemi
// çağrılır; "A\A\B" sınıfı yoksa, "A\A\B" otomatik
// yüklenmeye çalışılır
\A\B::fan(); // "A" isim alanında tanımlı "B" sınıfının "fan" yöntemi
// çağrılır; "A\B" sınıfı yoksa, "A\B" otomatik yüklenmeye
// çalışılır
?>