Tartalomjegyzék
Névterek
- Szerző: Sallai András
- Copyright © Sallai András, 2021
- Web: https://szit.hu
A névterekről
A névtereknek két előnyük van:
- Csoportosítjuk az összetartozó osztályokat.
- Egy nevet többször is felhasználhatunk.
A névterek az 5.3 PHP verziótól állnak rendelkezésre.
Létrehozás
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ó";
Dolgozók
Ütközés
Hibát kapunk a következő végrehajtásakor.
- index.php
<?php include "hatvan.php"; include "miskolc.php"; $a = new Hatvan\Dolgozo; $b = new Miskolc\Dolgozo;
- hatvan.php
<?php class Dolgozo { function __construct() { echo "Hatvani dolgozó<br>"; } }
- miskolc.php
<?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.
Minősített név
Tegyük a hatvan.php fájlban a dolgozó osztályt a Hatvan névtérbe:
- index.php
<?php include "hatvan.php"; include "miskolc.php"; $a = new Hatvan\Dolgozo;
- hatvan.php
<?php namespace Hatvan; class Dolgozo { function __construct() { echo "Hatvani dolgozó<br>"; } }
- miskolc.php
<?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.
Nem minősített név
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á:
- index.php
<?php namespace Hatvan; include "hatvan.php"; include "miskolc.php"; $a = new Dolgozo; // nem minősített név
- hatvan.php
<?php namespace Hatvan; class Dolgozo { function __construct() { echo "Hatvani dolgozó<br>"; } }
- miskolc.php
<?php class Dolgozo { function __construct() { echo "Miskolci dolgozó<br>"; } }
Teljesen minősített név
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).
- index.php
<?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
- hatvan.php
<?php namespace Hatvan; class Dolgozo { function __construct() { echo "Hatvani dolgozó<br>"; } }
- miskolc.php
<?php class Dolgozo { function __construct() { echo "Miskolci dolgozó<br>"; } }
A use használata
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:
- index.php
<?php include "hatvan.php"; include "miskolc.php"; use Hatvan\Dolgozo $a = new Dolgozo; // nem minősített név
- hatvan.php
<?php namespace Hatvan; class Dolgozo { function __construct() { echo "Hatvani dolgozó<br>"; } }
- miskolc.php
<?php class Dolgozo { function __construct() { echo "Miskolci dolgozó<br>"; } }
Így viszont a nem minősített név nem használható.
Az álnév használata
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;