Przestrzenie nazw w PHP

Stronę tą wyświetlono już: 209 razy

Tworząc bardziej zaawansowane skrypty PHP, które są tworzone z myślą o ich załączaniu często zachodzi konieczność zastosowania przestrzeni nazw, by uniknąć kolidowania nazw utworzonych funkcji czy deklaracji klas z kodem innego skryptu. Bardzo ważne też jest, aby kod określający przestrzeń nazw był umieszczony w pierwszej linijce pliku. Oto przykład:

Listing 1
  1. <?php namespace my_namespace; // nazwa przestrzeni nazw
  2. function myFunction(){
  3. echo("<p>" . __FUNCTION__ . "</p>");
  4. }
  5. class myClass{
  6. public function myMethod(){
  7. echo("<p>Namespace: " . __NAMESPACE__ . "</p>");
  8. }
  9. }
  10. ?>

Powyższy kod zapisany do pliku np. file.php można załączyć i wykorzystać w innym skrypcie w następujący sposób:

Listing 2
  1. <?php
  2. require("file.php");
  3. $obj = new my_namespace\myClass();
  4. $obj->myMethod();
  5. my_namespace\myFunction();
  6. ?>

Wynik działania powyższego kodu:

Namespace: my_namespace

my_namespace\myFunction

Operator jest tutaj znakiem separującym od przestrzeni nazw. Aby ułatwić sobie życie można skrócić nazwę przestrzeni nazw w następujący sposób:

Listing 3
  1. <?php
  2. require("file.php");
  3. use my_namespace as mnsp;
  4. $obj = new mnsp\myClass();
  5. $obj->myMethod();
  6. mnsp\myFunction();
  7. ?>

Przestrzenie nazw można również zapisywać z klamrami w następujący sposób:

Listing 4
  1. <?php namespace my_namespace{ // nazwa przestrzeni nazw
  2. function myFunction(){
  3. echo("<p>" . __FUNCTION__ . "</p>");
  4. }
  5. class myClass{
  6. public function myMethod(){
  7. echo("<p>Namespace: " . __NAMESPACE__ . "</p>");
  8. }
  9. }
  10. }
  11. ?>

Możliwe jest również zagnieżdżanie przestrzeni nazw np. tak:

Listing 5
  1. <?php namespace my_namespace/namespace2; ?>

Komentarze