PHP 5.3.0alpha2 (cli)
<?php
// namespace MyProject\DB;
require 'db.php';
use MyProject\DB; // fine; same as DB\
use MyProject\DB\Connection as DBC; // fine
use MyProject\DB as HM; // fine
use HM\Connection as DBC2; // class call ends with FATAL!!!
$x = new DBC(); // fine
$y = new HM\Connection(); // fine
$z = new DBC2(); // Fatal error: Class 'HM\Connection' not found
?>
İsim alanlarının kullanımı: Temeller
İ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:
-
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. -
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. - /home/veli/fan.txt şeklinde mutlak dosya yolu. Bu, /home/veli/fan.txt olarak çözümlenir.
- $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.
- $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.
- $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
?>
İsim alanlarının kullanımı: Temeller
kukoman at pobox dot sk
17-Oct-2008 06:20
17-Oct-2008 06:20
richard at richard-sumilang dot com
27-Mar-2008 09:36
27-Mar-2008 09:36
Syntax for extending classes in namespaces is still the same.
Lets call this Object.php:
<?php
namespace com\rsumilang\common;
class Object{
// ... code ...
}
?>
And now lets create a class called String that extends object in String.php:
<?php
class String extends com\rsumilang\common\Object{
// ... code ...
}
?>
Now if you class String was defined in the same namespace as Object then you don't have to specify a full namespace path:
<?php
namespace com\rsumilang\common;
class String extends Object
{
// ... code ...
}
?>
Lastly, you can also alias a namespace name to use a shorter name for the class you are extending incase your class is in seperate namespace:
<?php
namespace com\rsumilang\util;
use com\rsumlang\common as Common;
class String extends Common\Object
{
// ... code ...
}
?>
- Richard Sumilang
