A névtereknek két előnyük van:
A névterek az 5.3 PHP verziótól állnak rendelkezésre.
namespace Nevter1;
A névtér meghatározásoknak mindig a többi PHP utasítás előtt kell állnia.
<?php namespace Nevter1; echo "Helló";
Hibát kapunk a következő végrehajtásakor.
<?php include "hatvan.php"; include "miskolc.php"; $a = new Hatvan\Dolgozo; $b = new Miskolc\Dolgozo;
<?php class Dolgozo { function __construct() { echo "Hatvani dolgozó<br>"; } }
<?php class Dolgozo { function __construct() { echo "Miskolci dolgozó<br>"; } }
Ha futtatjuk a kódot, hibát kapunk, mivel ütközik a hatvan.php Dolgozo osztálya a miskolc.php dolgozó osztályával.
Tegyük a hatvan.php fájlban a dolgozó osztályt a Hatvan névtérbe:
<?php include "hatvan.php"; include "miskolc.php"; $a = new Hatvan\Dolgozo;
<?php namespace Hatvan; class Dolgozo { function __construct() { echo "Hatvani dolgozó<br>"; } }
<?php class Dolgozo { function __construct() { echo "Miskolci dolgozó<br>"; } }
Az index.php-ban a Hatvan\Dolgozo az osztály minősített (angolul: qualified) neve. A hatvan.php-ban található Dolgozo osztályt leválasztottuk a globális névtérből a Hatvan névtérbe, így ütközés már nem áll fenn.
Tegyük a index.php tartalmát is a Hatvan névtérbe. Így nem kell megadni a Dolgozo osztály példányosításánál a névteret, nem minősített névvel (angolul: unqualified name) hivatkozhatunk rá:
<?php namespace Hatvan; include "hatvan.php"; include "miskolc.php"; $a = new Dolgozo; // nem minősített név
<?php namespace Hatvan; class Dolgozo { function __construct() { echo "Hatvani dolgozó<br>"; } }
<?php class Dolgozo { function __construct() { echo "Miskolci dolgozó<br>"; } }
De meghívhatom a globális térben maradt Dolgozo osztályt is, ha „\” karakterrel a globális térre, vagy a gyökérre hivatkozom. Ezt nevezik teljesen minősített névnek (angolul: fully qualified name, FQDN).
<?php namespace Hatvan; include "hatvan.php"; include "miskolc.php"; $a = new Dolgozo; // nem minősített név $b = new \Dolgozo; // teljesen minősített név
<?php namespace Hatvan; class Dolgozo { function __construct() { echo "Hatvani dolgozó<br>"; } }
<?php class Dolgozo { function __construct() { echo "Miskolci dolgozó<br>"; } }
Ha nem minősített nevet használunk, és az index.php tartalmát nem szeretnénk a Hatvan névtérbe helyezni, használjuk a use kulcsszót. Ezzel használatba vehetjük az adott névtér, adott osztályát:
<?php include "hatvan.php"; include "miskolc.php"; use Hatvan\Dolgozo $a = new Dolgozo; // nem minősített név
<?php namespace Hatvan; class Dolgozo { function __construct() { echo "Hatvani dolgozó<br>"; } }
<?php class Dolgozo { function __construct() { echo "Miskolci dolgozó<br>"; } }
Így viszont a nem minősített név nem használható.
Az álnév segítségével használható a nem minősített név is:
<?php include "hatvan.php"; include "miskolc.php"; use Hatvan\Dolgozo as HatvaniDolgozo; $a = new HatvaniDolgozo; $b = new Dolgozo;