Tartalomjegyzék

< PHP OOP

Névterek

A névterekről

A névtereknek két előnyük van:

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;

Forrás