Príklady použitia menného priestoru v php. Menné priestory v PHP, vysvetlené. Menné priestory: Viacnásobné rozsahy popisu

Nedávno som zapuzdril svoj projekt do menného priestoru a narazil som na problém nedostatku riadnej dokumentácie. Všetko, čo sa nám podarilo nájsť, pochádza približne z roku 2009, a je takmer rok 2012... V nájdených materiáloch je veľa nefunkčných miest, ktoré používajú niečo, čo v aktuálnej verzii php nie je. V tejto súvislosti by som rád vniesol trochu svetla do tejto problematiky.
Čo je teda priestor názvov alebo priestor názvov? Veľká wikipedia ich definuje takto:

Menný priestor je množina, ktorá znamená model, abstraktné úložisko alebo prostredie vytvorené na logické zoskupovanie jedinečných identifikátorov (teda mien). Identifikátor definovaný v mennom priestore je spojený s týmto menným priestorom. Ten istý identifikátor môže byť nezávisle definovaný vo viacerých priestoroch. Hodnota spojená s identifikátorom definovaným v jednom mennom priestore teda môže (alebo nemusí) mať rovnaký (alebo skôr odlišný) význam ako rovnaký identifikátor definovaný v inom mennom priestore. Jazyky zohľadňujúce priestor názvov definujú pravidlá, ktoré označujú, do ktorého priestoru názvov identifikátor patrí (teda jeho definícia).wiki

Všetko jasné? Je to vlastne jednoduché. Pred verziou 5.3 boli v php iba dva priestory – globálne (v ktorom bol vykonaný váš hlavný kód) a lokálne (v ktorom boli definované funkčné premenné).

Od verzie 5.3 sa všetko zmenilo. Teraz môžete definovať svoj menný priestor, v ktorom budú existovať vaše triedy, metódy atď.


Dúfam, že to bolo trochu jasnejšie.

Triedy som konkrétne pomenoval rovnako. Keďže sú definované v rôznych priestoroch, napriek rovnakým názvom ide o dve rôzne triedy. Hlavný skript stále funguje v globálnom priestore, nič sa tu nezmenilo a stále sa v ňom dajú definovať triedy a funkcie. Tak načo sú potom priestory? Po prvé, aby ste sa uistili, že keď zahrniete súbor s nejakým rámcom alebo knižnicou, vaše triedy neprepíšu triedy rámca alebo naopak.

Aby ste mohli použiť triedy definované vo vašom mennom priestore, musíte na správnom mieste importovať priestor, ktorý definujete, do globálneho (zvyčajne to uprednostňujem na začiatku súboru). Na tento účel použite kľúčové slovo use

Pozor: z nejakého dôvodu php neumožňuje použitie kľúčového slova použitie v stavových blokoch a slučkách

Zoberme si príklad z obrázkov a implementujme ho do kódu:

Pozor: kľúčové slovo menného priestoru sa musí nachádzať na samom začiatku súboru, hneď za ním
súbor A.php
súbor B.php
Je možná alternatívna syntax:
Odporúča sa deklarovať každý menný priestor v samostatnom súbore. Aj keď je to možné v jednom, prísne sa to neodporúča!
Teraz prejdime k tretiemu súboru, v ktorom bude fungovať náš hlavný skript
index.php
Zdalo by sa, že je to výhoda, len sa pridáva ďalší kód, ale nie je to celkom pravda, o kúsok ďalej uvediem príklad triedy autoload, s ktorou budú zbytočné riadky spájajúce súbory s triedami.
Teraz sa pozrime na naše triedy.

Pozor: pomocou operátora rozlíšenia rozsahu (::) v menných priestoroch php nepovolené! Jediná vec, na ktorú je vhodný, je prístup k metódam a konštantám statických tried. Najprv ho chceli použiť pre menný priestor, ale potom sa od neho rozhodli kvôli problémom, ktoré sa vyskytli. Preto konštrukcia ako A::A::say(); je neplatný a bude mať za následok chybu.

Pre priestory názvov musíte použiť znak spätnej lomky "\"
Pozor: Aby sa predišlo nedorozumeniam, pri použití v reťazcoch je potrebné tento znak zakódovať: "\\"

Menné priestory môžu byť vnorené do seba, pridajme do nášho súboru A.php:
a do indexu napíšeme nasledovné:

Dôležitým bodom je použitie aliasov pre importované priestory. Môžete napísať A\subA::say(); Súhlasíte s tým, že je ťažké zakaždým písať úplné cesty k medzerám; aby sa tomu zabránilo, boli zavedené aliasy. Pri kompilácii sa stane nasledovné: namiesto aliasu sub sa nahradí A\subA, takže dostaneme volanie A\subA::say();

Čo sa potom stane pri volaní funkcií definovaných v globálnom priestore? PHP najskôr hľadá funkciu v priestore, kde práve pracujete, a ak ju nenájde, prejde do globálneho rozsahu. Ak chcete okamžite uviesť, že používate globálnu funkciu, musíte pred ňou uviesť spätnú lomku.

Aby sa predišlo problémom s automatickým načítavaním tried z priestorov, súborový systém musí byť organizovaný podobne ako organizácia priestorov. Napríklad máme koreňový priečinok tried, kde budú uložené naše triedy, potom môžu byť naše priestory usporiadané nasledovne
triedy\A\A.php
class\A\sub\A.php (podpriestor bude umiestnený v samostatnom súbore)
triedy\B\B.php

PHP má magickú konštantu __NAMESPACE__, ktorá obsahuje názov aktuálneho priestoru.

A teraz o automatickom načítaní.

Trieda nižšie nie je moja, len som ju sfunkčnil a trochu vylepšil, prevzaté odtiaľto.
Pozor: Aby sa vaše triedy načítali, názov triedy sa musí zhodovať s názvom súboru!

".$file." v " .$filepath)); if (file_exists($filepath)) ( if(Autoloader::debug) Autoloader::StPutFile(("connected " .$filepath)); $flag = FALSE; required_once($filepath); break; ) Autoloader::recursive_autoload($file, $path2, &$flag); ) ) closedir($handle); ) ) súkromná statická funkcia StPutFile($data) ( $dir = $_SERVER["DOCUMENT_ROOT"] ." /Log/Log.html"; $file = fopen($dir, "a"); flock($file, LOCK_EX); fwrite($file, ("║" .$data ."=>" .date(" d.m.Y H:i:s") ."

" .PHP_EOL)); flock($súbor, LOCK_UN); fclose ($súbor); ) ) \spl_autoload_register("vašeMenoSpace\Autoloader::autoload"); )
Ak sa pozriete na názvy tried, ktoré prichádzajú na načítanie, uvidíte, že každej triede predchádza predpona z menného priestoru, ktorý sa používa. Preto odporúčam použiť umiestnenie súborov v adresároch podobných mennému priestoru, čo urýchli vyhľadávanie na jednu alebo dve iterácie.

Teraz môže byť náš index napísaný takto:
Teraz sa automaticky načítajú všetky triedy a rozhrania, ktoré budete používať.

Aby sme demonštrovali niektoré dynamické schopnosti jazyka s medzerami, deklarujme ďalšiu triedu:
test.php

Index.php
sayName("test"); //alebo môžete urobiť tento test\sayName("test2"); //alebo takto $obj::sayName("test"); //alebo môžete urobiť tento test::sayName("test2");

Dúfam, že môj článok bude pre niekoho užitočný.

PHP, počnúc verziou 5.3, nám dalo menné priestory. Odvtedy prebehla pomalá a vášnivá diskusia o tom, ako používať tento menný priestor?
Niektoré rámce, ako napríklad Symphony, Laravel a samozrejme Zend, prijali túto technológiu.
To všetko viac-menej zapadá do schémy MVC. Zostáva jedna, pravdepodobne večná, diskusia: aký by mal byť hlavný manželský pár aplikácie - Model a Ovládač?
Niektorí nám hovoria, že Modelka by mala byť statná a tučná a s ňou štíhla a chudá Kontrolórka. Jedným slovom - matriarchát.
Iní, naopak, veria, že Ovládač musí všetko riadiť a veliť, takže sa ukáže ako solídny a dobre živený. A s ním je tenký, štíhly Model, ktorého úlohou je dávať a prinášať. Toto je patriarchát.
Čo je teda lepšie v schéme MVC? Patriarchát alebo matriarchát?
Pozrime sa na to z pohľadu budovania rodinnej jednotky založenej na demokracii. A nech nám s tým pomôže Namespace.

Nemáme radi hrubé, neohrabané ovládače, ktoré ako býk v obchode s porcelánom dokážu pri nepozornosti rozdrviť celú aplikáciu.
Ani my nemáme radi tučné Modelky. No kto ich má rád? Musia byť hodní pódia!
Pokúsme sa s pomocou Namespace, ako s dobrým dohadzovačom, vytvoriť harmonickú rodinu.

Najprv si vytvoríme kostru aplikácie. Nech je to akokoľvek banálne, nech je to blog.

Vytvorili sme základnú štruktúru, kde:

  • Blog je úložisko našej aplikácie;
  • Views and Templates - ukladanie pohľadov a šablón;
  • Utility - úložisko zdieľaných knižníc;
  • index.php - bootstrap skript;
  • Príspevok - tu by sa mala odohrať rodinná idylka Kontrolóra a Modelky.

S index.php je všetko jednoduché:

spustiť (); /* * koniec indexu.php */

Určíme potrebné cesty a vytvoríme autoloader.
Autoloader načíta požadované triedy, ktoré sa nachádzajú v hierarchii priečinkov podľa priestoru názvov tried. Napríklad trieda BlogPostServicesView by sa hľadala v Blog/Post/Services.
A je tu prvé stretnutie s Namespace.
Keď spustíme index.php, vytvoríme inštanciu aplikácie Blog, ktorej trieda sa načíta z Blog/Blog.php.
Pozrime sa naňho.

príspevok = nový príspevok(); ) public function run() ( $this->post->view->all(); ) )//end class Blog

Pri vytváraní triedy Blog do nej vložíme triedu Post pomocou priestoru názvov BlogPost a autoloader ju načíta z Blog/Post/Post.php.
Pravdepodobne sa táto trieda môže nazývať Controller,

view = new View(); ) )//ukončiť triedu Post

Entita Post zahŕňa:
- štruktúra samotného dátového záznamu - BlogPostEntitiesPostEntity.php

Služby obsluhujúce požiadavky kontrolóra – BlogPostServicesView.php (napríklad jedna zo služieb)

db = new DB(); )//koniec __construct public function all() ( $posts = $this->db->survey(); Contemplate::compose(array("header" => "header", "main" => "main", "footer" => "footer", array("posts" => $posts, "title" => "Viper site",)); ) )//end class PostView

Databázový interakčný systém - BlogPostRepositoriesDB.php - tu je, náš tenký, elegantný model,
Len to dajte, prineste a nič viac!

dbh = new PDO("mysql:host=localhost;dbname=test", $user, $pass, array(PDO::ATTR_PERSISTENT => true)); ) catch (PDOException $e) ( echo "Chyba!: " . $e->getMessage() ."
"; die(); ) )//end __construct public function survey() ( $query_view = $this->dbh->prepare("SELECT * z príspevkov"); $query_view->execute(); return $query_view- >fetchAll(PDO::FETCH_CLASS, "BlogPostEntitiesPostEntity"); )//ukončiť prieskum )//ukončiť triedu Db

Vďaka tomu sa nám podarilo vytvoriť štruktúru aplikácie, kde sú všetky komponenty dobre prepojené, pričom sme dosiahli jasné oddelenie tried, kde každá trieda plní svoju vlastnú úlohu. Náš ovládač je tenký a zároveň výkonný. Modelka sa mu zhoduje. Perfektná rodinka!
A to všetko vďaka Namespace.

Nehádam sa, v mnohých prípadoch je rámec pohodlný. Ale pozri, Namespace ti nič nepripomína?
Jasné rozdelenie do tried, prísna a zároveň flexibilná hierarchia adresárov a tried, úplne podriadená vývojárovi.
Niekedy neexistuje taký významný doplnok v podobe stoviek súborov a tried vo forme rámca.
Absencia prokrustovského lôžka pravidiel pre interakciu tried a komponentov.

Článok bol inšpirovaný myšlienkami na túto tému od Taylora Otwella, autora frameworku Laravel, za čo mu patrí veľká vďaka.
Adresa zdrojového kódu príkladu na GitHub.

Ahoj. V dnešnom článku sa pozrieme na to, čo sú menné priestory v PHP.

Ak ho používate dlhší čas OOP, potom ste sa pravdepodobne stretli so situáciou, keď pri pripájaní knižnice tretej strany došlo k zlyhaniu v dôsledku skutočnosti, že v kóde už používate rovnaké názvy tried ako v knižnici. To sa môže stať najmä vtedy, ak používate bežné názvy ako napr "Model", "db" a tak ďalej. Teraz vám poviem, ako to opraviť.

Menný priestor- ide o nejaký druh úložiska vytvoreného pre abstraktné zoskupovanie jedinečných identifikátorov (názvov).

Tie. ak použijete menné priestory, potom môžete bezpečne pripojiť knižnice tretích strán a nemusíte sa báť, že budú mať rovnaké názvy ako vo vašom kóde. Skončime s teóriou a prejdime k praxi.

Vytvorme súbor mojatrieda.php s týmto obsahom

menný priestor my\oneProject;
trieda MojaTrieda ( )
?>

Tu sme vytvorili triedu v mennom priestore my\oneProject. Mimochodom, musíte napísať presne spätnú lomku. Nenechajte sa zmiasť!

Teraz v súbore index.php napíšeme nasledovné

require_once("myclass.php");
$mc = new MyClass(); // Chyba: trieda sa nenašla
$mc = new my\oneProject\MyClass(); // všetko funguje
?>

Ako vidíte, teraz nie je možné vytvoriť triedu len tak, musíte zadať v ktorej menný priestor on leží.

Môžeme určiť niekoľko naraz menné priestory v jednom súbore

projekt menného priestoru;

Const CONNECT_OK = 1;
pripojenie triedy ( )
funkcia connect() ( )

Menný priestorInýProjekt;

Const CONNECT_OK = 1;
pripojenie triedy ( )
funkcia connect() ( )
?>

Napriek tomu, že máme absolútne identické názvy tried, funkcií a konštánt, nebudeme mať konflikt mien, pretože ležia v rôznych priestoroch.

Môžeme použiť aj syntax zátvoriek.

projekt menného priestoru (

Const CONNECT_OK = 1;
pripojenie triedy ( )
funkcia connect() ( )
}

Menný priestor InýProjekt (

Const CONNECT_OK = 1;
pripojenie triedy ( )
funkcia connect() ( )
}
?>

Ak skombinujete kód do globálny menný priestor s kódom v iných priestoroch, potom sa použije iba syntax so zátvorkami.

projekt menného priestoru (

Const CONNECT_OK = 1;
pripojenie triedy ( )
funkcia connect() ( )
}

Priestor názvov ( // globálny kód
session_start();
$a = Project\connect();
echo Project\Connection::start();
}
?>

Tiež nezabudnite, že definovanie menného priestoru by malo byť vždy prvým riadkom kódu. Ak to napíšete takto, bude chyba

Ak chcete zistiť, v ktorom mennom priestore sa práve nachádzate, môžete použiť konštantu __NAMESPACE__

projekt menného priestoru;
echo "", __NAMESPACE__, """; // vytlačí "Projekt"
?>

Pomocou tejto konštanty môžete napríklad dynamicky vytvárať názvy

projekt menného priestoru;

Function incl($classname) (
$a = __NAMESPACE__ . "\\". $classname;
vrátiť nové $a;
}
?>

Tak to je na dnes všetko. Absolvovaním kurzu môžete získať viac informácií a praktických vedomostí

Nedávno som zapuzdril svoj projekt do menného priestoru a narazil som na problém nedostatku riadnej dokumentácie. Všetko, čo sa nám podarilo nájsť, pochádza približne z roku 2009, a je takmer rok 2012... V nájdených materiáloch je veľa nefunkčných miest, ktoré používajú niečo, čo v aktuálnej verzii php nie je. V tejto súvislosti by som rád vniesol trochu svetla do tejto problematiky.
Čo je teda priestor názvov alebo priestor názvov? Veľká wikipedia ich definuje takto:

Menný priestor je množina, ktorá znamená model, abstraktné úložisko alebo prostredie vytvorené na logické zoskupovanie jedinečných identifikátorov (teda mien). Identifikátor definovaný v mennom priestore je spojený s týmto menným priestorom. Ten istý identifikátor môže byť nezávisle definovaný vo viacerých priestoroch. Hodnota spojená s identifikátorom definovaným v jednom mennom priestore teda môže (alebo nemusí) mať rovnaký (alebo skôr odlišný) význam ako rovnaký identifikátor definovaný v inom mennom priestore. Jazyky zohľadňujúce priestor názvov definujú pravidlá, ktoré označujú, do ktorého priestoru názvov identifikátor patrí (teda jeho definícia).wiki

Všetko jasné? Je to vlastne jednoduché. Pred verziou 5.3 boli v php iba dva priestory – globálne (v ktorom bol vykonaný váš hlavný kód) a lokálne (v ktorom boli definované funkčné premenné).

Od verzie 5.3 sa všetko zmenilo. Teraz môžete definovať svoj menný priestor, v ktorom budú existovať vaše triedy, metódy atď.


Dúfam, že to bolo trochu jasnejšie.

Triedy som konkrétne pomenoval rovnako. Keďže sú definované v rôznych priestoroch, napriek rovnakým názvom ide o dve rôzne triedy. Hlavný skript stále funguje v globálnom priestore, nič sa tu nezmenilo a stále sa v ňom dajú definovať triedy a funkcie. Tak načo sú potom priestory? Po prvé, aby ste sa uistili, že keď zahrniete súbor s nejakým rámcom alebo knižnicou, vaše triedy neprepíšu triedy rámca alebo naopak.

Aby ste mohli použiť triedy definované vo vašom mennom priestore, musíte na správnom mieste importovať priestor, ktorý definujete, do globálneho (zvyčajne to uprednostňujem na začiatku súboru). Na tento účel použite kľúčové slovo use

Pozor: z nejakého dôvodu php neumožňuje použitie kľúčového slova použitie v stavových blokoch a slučkách

Zoberme si príklad z obrázkov a implementujme ho do kódu:

Pozor: kľúčové slovo menného priestoru sa musí nachádzať na samom začiatku súboru, hneď za ním
súbor A.php
súbor B.php
Je možná alternatívna syntax:
Odporúča sa deklarovať každý menný priestor v samostatnom súbore. Aj keď je to možné v jednom, prísne sa to neodporúča!
Teraz prejdime k tretiemu súboru, v ktorom bude fungovať náš hlavný skript
index.php
Zdalo by sa, že je to výhoda, len sa pridáva ďalší kód, ale nie je to celkom pravda, o kúsok ďalej uvediem príklad triedy autoload, s ktorou budú zbytočné riadky spájajúce súbory s triedami.
Teraz sa pozrime na naše triedy.

Pozor: pomocou operátora rozlíšenia rozsahu (::) v menných priestoroch php nepovolené! Jediná vec, na ktorú je vhodný, je prístup k metódam a konštantám statických tried. Najprv ho chceli použiť pre menný priestor, ale potom sa od neho rozhodli kvôli problémom, ktoré sa vyskytli. Preto konštrukcia ako A::A::say(); je neplatný a bude mať za následok chybu.

Pre priestory názvov musíte použiť znak spätnej lomky "\"
Pozor: Aby sa predišlo nedorozumeniam, pri použití v reťazcoch je potrebné tento znak zakódovať: "\\"

Menné priestory môžu byť vnorené do seba, pridajme do nášho súboru A.php:
a do indexu napíšeme nasledovné:

Dôležitým bodom je použitie aliasov pre importované priestory. Môžete napísať A\subA::say(); Súhlasíte s tým, že je ťažké zakaždým písať úplné cesty k medzerám; aby sa tomu zabránilo, boli zavedené aliasy. Pri kompilácii sa stane nasledovné: namiesto aliasu sub sa nahradí A\subA, takže dostaneme volanie A\subA::say();

Čo sa potom stane pri volaní funkcií definovaných v globálnom priestore? PHP najskôr hľadá funkciu v priestore, kde práve pracujete, a ak ju nenájde, prejde do globálneho rozsahu. Ak chcete okamžite uviesť, že používate globálnu funkciu, musíte pred ňou uviesť spätnú lomku.

Aby sa predišlo problémom s automatickým načítavaním tried z priestorov, súborový systém musí byť organizovaný podobne ako organizácia priestorov. Napríklad máme koreňový priečinok tried, kde budú uložené naše triedy, potom môžu byť naše priestory usporiadané nasledovne
triedy\A\A.php
class\A\sub\A.php (podpriestor bude umiestnený v samostatnom súbore)
triedy\B\B.php

PHP má magickú konštantu __NAMESPACE__, ktorá obsahuje názov aktuálneho priestoru.

A teraz o automatickom načítaní.

Trieda nižšie nie je moja, len som ju sfunkčnil a trochu vylepšil, prevzaté odtiaľto.
Pozor: Aby sa vaše triedy načítali, názov triedy sa musí zhodovať s názvom súboru!

".$file." v " .$filepath)); if (file_exists($filepath)) ( if(Autoloader::debug) Autoloader::StPutFile(("connected " .$filepath)); $flag = FALSE; required_once($filepath); break; ) Autoloader::recursive_autoload($file, $path2, &$flag); ) ) closedir($handle); ) ) súkromná statická funkcia StPutFile($data) ( $dir = $_SERVER["DOCUMENT_ROOT"] ." /Log/Log.html"; $file = fopen($dir, "a"); flock($file, LOCK_EX); fwrite($file, ("║" .$data ."=>" .date(" d.m.Y H:i:s") ."

" .PHP_EOL)); flock($súbor, LOCK_UN); fclose ($súbor); ) ) \spl_autoload_register("vašeMenoSpace\Autoloader::autoload"); )
Ak sa pozriete na názvy tried, ktoré prichádzajú na načítanie, uvidíte, že každej triede predchádza predpona z menného priestoru, ktorý sa používa. Preto odporúčam použiť umiestnenie súborov v adresároch podobných mennému priestoru, čo urýchli vyhľadávanie na jednu alebo dve iterácie.

Teraz môže byť náš index napísaný takto:
Teraz sa automaticky načítajú všetky triedy a rozhrania, ktoré budete používať.

Aby sme demonštrovali niektoré dynamické schopnosti jazyka s medzerami, deklarujme ďalšiu triedu:
test.php

Index.php
sayName("test"); //alebo môžete urobiť tento test\sayName("test2"); //alebo takto $obj::sayName("test"); //alebo môžete urobiť tento test::sayName("test2");

Dúfam, že môj článok bude pre niekoho užitočný.

(PHP 5 >= 5.3.0, PHP 7)

Pred diskusiou o použití menných priestorov je dôležité pochopiť, ako PHP vie, ktorý prvok menného priestoru požaduje váš kód. Medzi mennými priestormi PHP a súborovým systémom možno urobiť jednoduchú analógiu. Existujú tri spôsoby prístupu k súboru v súborovom systéme:

  1. Relatívny názov súboru napr foo.txt. Toto rieši aktuálny adresár/foo.txt kde currentdirectory je aktuálne obsadený adresár. Ak je teda aktuálny adresár /home/foo, názov rieši na /home/foo/foo.txt.
  2. Relatívna cesta ako názov podadresár/foo.txt. Toto rieši aktuálny adresár/podadresár/foo.txt.
  3. Absolútny názov cesty ako /main/foo.txt. Toto rieši /main/foo.txt.
Rovnaký princíp je možné aplikovať na elementy s menným priestorom v PHP. Napríklad na názov triedy možno odkazovať tromi spôsobmi:
  1. Nekvalifikované meno alebo názov triedy bez predpony $a = new foo(); alebo foo::statickámetóda(); aktuálny menný priestor, to rieši aktuálny priestor mien\foo foo. Jedna výhrada: nekvalifikované názvy funkcií a konštánt sa rozdelia na globálne funkcie a konštanty, ak funkcia alebo konštanta s menným priestorom nie je definovaná. Podrobnosti nájdete v časti Používanie priestorov názvov: návrat ku globálnej funkcii/konštante.
  2. Kvalifikovaný názov alebo názov triedy s predponou $a = nový podpriestor\foo(); alebo subnamespace\foo::staticmethod();. Ak je aktuálny menný priestor aktuálny menný priestor, to rieši aktuálny namespace\subnamespace\foo. Ak je kód globálny kód bez menného priestoru, vyrieši sa to podnázvový priestor\foo.
  3. Plne kvalifikovaný názov alebo názov s predponou s operátorom globálnej predpony $a = new \currentnamespace\foo(); alebo \currentnamespace\foo::staticmethod();. Toto sa vždy prevedie na doslovný názov uvedený v kóde, aktuálny priestor mien\foo.

Tu je príklad troch druhov syntaxe v skutočnom kóde:

menný priestor Foo\Bar\subnamespace;

const FOO = 1;
funkcia foo()()
trieda foo
{
}
?>

menný priestor Foo\Bar;
zahrnúť "súbor1.php" ;

const FOO = 2;
funkcia foo()()
trieda foo
{
statická funkcia staticmethod()()
}

/* Nekvalifikované meno */
foo(); foo::statickámetóda(); echo FOO ;

/* Kvalifikovaný názov */
podpriestor mien\foo(); // rieši funkciu Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // rieši triedu Foo\Bar\subnamespace\foo,
// metóda statická metóda
echo subnamespace\FOO; // rieši konštantný Foo\Bar\subnamespace\FOO

/* Plne kvalifikovaný názov */
\foo\bar\foo(); // rieši funkciu Foo\Bar\foo
\foo\bar\foo::statická metóda(); // rieši triedu Foo\Bar\foo, metóda statická metóda
echo\Foo\Bar\FOO; // sa zmení na konštantný Foo\Bar\FOO
?>

Všimnite si, že na prístup k akejkoľvek globálnej triede, funkcii alebo konštante je možné použiť plne kvalifikovaný názov, ako napr \strlen() alebo \Výnimka alebo \INI_ALL. ?>