Példák a névtér használatára php-ben. Névterek PHP-ben, magyarázat. Névterek: A leírás többféle hatóköre

Nemrég beágyaztam a projektemet egy névtérbe, és belefutottam a megfelelő dokumentáció hiányának problémájába. Minden, amit sikerült megtalálnunk, nagyjából 2009-ből származik, és ez már majdnem 2012... A talált anyagban nagyon sok olyan nem működő hely van, ahol olyasmit használnak, ami a php jelenlegi verziójában nincs meg. Ezzel kapcsolatban szeretném megvilágítani ezt a kérdést.
Tehát mi az a névtér vagy névtér? A nagy wikipédia így határozza meg őket:

A névtér egy halmaz, amely az egyedi azonosítók (vagyis nevek) logikai csoportosítására létrehozott modellt, absztrakt tárolót vagy környezetet jelent. A névtérben meghatározott azonosító ehhez a névtérhez van társítva. Ugyanaz az azonosító egymástól függetlenül definiálható több helyen. Így az egyik névtérben meghatározott azonosítóhoz társított érték ugyanazt (vagy inkább eltérő) jelentéssel bírhatja (vagy nem), mint egy másik névtérben meghatározott azonos azonosító. A névtér-tudatos nyelvek szabályokat határoznak meg, amelyek jelzik, hogy egy azonosító melyik névtérhez tartozik (vagyis a definíciójához).wiki

Minden tiszta? Valójában egyszerű. Az 5.3-as verzió előtt csak két szóköz volt a php-ben – a global (amelyben a fő kód futott) és a local (amelyben a függvényváltozók voltak meghatározva).

Az 5.3-as verzió óta minden megváltozott. Most megadhatja a névterét, amelyben az osztályok, metódusok stb.


Remélem kicsit világosabb lett.

Konkrétan ugyanígy neveztem el az osztályokat. Mivel különböző terekben vannak meghatározva, két különböző osztályról van szó, annak ellenére, hogy ugyanaz a neve. A fő szkript továbbra is a globális térben működik, itt semmi sem változott, osztályok és függvények továbbra is definiálhatók benne. Akkor mire valók a terek? Mindenekelőtt meg kell győződni arról, hogy amikor valamilyen keretrendszert vagy könyvtárat tartalmaz, az osztályok nem írják felül a keretrendszer osztályait, és fordítva.

A névtérben definiált osztályok használatához a definiált teret a megfelelő helyre kell importálni a globálisba (én ezt szoktam a fájl elején megtenni) Ehhez használd a use kulcsszót.

Figyelem: a php valamiért nem engedi a kulcsszó használatát használatállapotú blokkokban és hurkokban

Vegyük a példát a képekből, és valósítsuk meg kódban:

Figyelem: a névtér kulcsszónak a fájl legelején, közvetlenül utána kell lennie
fájl A.php
B.php fájl
Alternatív szintaxis lehetséges:
Javasoljuk, hogy minden névteret külön fájlban deklaráljon. Egyben ugyan lehetséges, de szigorúan nem ajánlott!
Most térjünk át a harmadik fájlra, amelyben a fő szkriptünk fog működni
index.php
Úgy tűnik, hogy ez előny, csak több kódot adnak hozzá, de ez nem teljesen igaz, kicsit tovább hozok egy példát egy autoload osztályra, amellyel a fájlokat osztályokkal összekötő sorok feleslegesek lesznek.
Most pedig nézzük az osztályainkat.

Figyelem: a hatókör felbontási operátor (::) használatával a php névterekben nem megengedett! Az egyetlen dolog, amire alkalmas, az a statikus osztálymetódusok és konstansok elérése. Először a névtérhez akarták használni, de aztán a felmerülő problémák miatt nem döntöttek. Ezért egy olyan konstrukció, mint az A::A::say(); érvénytelen, és hibához vezet.

A névterekhez a "\" fordított perjelet kell használni
Figyelem: A félreértések elkerülése érdekében ki kell hagyni ezt a karaktert, ha karakterláncokban használjuk: "\\"

A névterek egymásba ágyazhatók, tegyük hozzá az A.php fájlunkhoz:
az indexbe pedig a következőket írjuk:

Fontos szempont az álnevek használata az importált terekhez. Írhatsz A\subA::say(); Egyetértesz azzal, hogy nehéz minden alkalommal teljes elérési utat írni a szóközökhöz; ennek elkerülésére álneveket vezettünk be. Fordításkor a következő történik: az alias sub helyett A\subA lesz behelyettesítve, így az A\subA::say();

Mi történik akkor a globális térben meghatározott függvények meghívásakor? A PHP először azon a területen belül keres egy függvényt, ahol éppen dolgozik, és ha nem találja, akkor a globális hatókörbe lép. Annak érdekében, hogy azonnal jelezze, hogy globális függvényt használ, meg kell előznie egy fordított perjelet.

Az osztályok szóközökből történő automatikus betöltésével kapcsolatos problémák elkerülése érdekében a fájlrendszert a szóközök szervezéséhez hasonlóan kell megszervezni. Például van egy gyökérmappánk osztályaink, ahol az osztályaink kerülnek tárolásra, majd tereink a következőképpen rendezhetők
osztályok\A\A.php
classes\A\sub\A.php (az alterület külön fájlba kerül)
osztályok\B\B.php

A PHP-nek van egy __NAMESPACE__ mágikus állandója, amely az aktuális tér nevét tartalmazza.

És most az automatikus betöltésről.

A lenti osztály nem az enyém, csak működőképessé tettem és egy kicsit javítottam, innen vettem.
Figyelem: Az osztályok betöltéséhez az osztály nevének meg kell egyeznie a fájl nevével!

" .$file ." in " .$filepath)); if (file_exists($filepath)) ( if(Autoloader::debug) Autoloader::StPutFile(("connected" .$filepath)); $flag = FALSE; követelmény_egyszer($fájlútvonal); break; ) Autoloader::recursive_autoload($file, $path2, &$flag); ) ) closedir($handle); ) ) privát statikus függvény 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($file, LOCK_UN); fclose ($file); ) ) \spl_autoload_register("yourNameSpace\Autoloader::autoload"); )
Ha megnézi a betöltésre érkező osztályok nevét, látni fogja, hogy minden osztály előtt egy előtag szerepel a használatban megadott névtérből. Ezért azt javaslom, hogy a fájlok helyét a névtérhez hasonló könyvtárakban használjuk, ez egy-két iterációra gyorsítja a keresést.

Most az indexünket így írhatjuk fel:
Most az összes használt osztály és interfész automatikusan betöltődik.

A nyelv szóközökkel kapcsolatos dinamikus képességeinek bemutatásához deklaráljunk egy másik osztályt:
teszt.php

Index.php
sayName("teszt"); //vagy megteheti ezt a tesztet\sayName("teszt2"); //vagy így $obj::sayName("teszt"); //vagy elvégezheti ezt a tesztet::sayName("teszt2");

Remélem, hogy cikkem hasznos lesz valakinek.

A PHP az 5.3-as verziótól kezdve névtereket adott nekünk. Azóta lassú és heves vita folyik arról, hogyan használjuk ezt a névteret?
Néhány keretrendszer, például a Symphony, a Laravel és természetesen a Zend is alkalmazta ezt a technológiát.
Mindez többé-kevésbé belefért az MVC rendszerébe. Marad egy, valószínűleg örök vita: mi legyen az alkalmazás fő házassági párja - Modell és Controller?
Egyesek azt mondják, hogy a modellnek vaskosnak és kövérnek, vele együtt karcsú és vékony vezérlőnek kell lennie. Egyszóval - matriarchátus.
Mások éppen ellenkezőleg, úgy gondolják, hogy az irányítónak kell mindent irányítania és irányítania, így szilárdnak és jól tápláltnak bizonyul. És vele egy vékony, karcsú Modell, akinek az a feladata, hogy adjon és hozzon. Ez a patriarchátus.
Tehát melyik a jobb az MVC rendszerben? Patriarchátus vagy matriarchátus?
Nézzük ezt a demokrácián alapuló családi egység felépítésének szemszögéből. A Névtér pedig segítsen nekünk ebben.

Nem szeretjük a vastag, nehézkes vezérlőket, amelyek, mint egy bika a porcelánboltban, összetörhetik az egész alkalmazást, ha figyelmetlen vagy.
Mi sem szeretjük a kövér modelleket. Nos, ki szereti őket? Bizonyára méltóak a dobogóra!
Próbáljunk meg a Névtér segítségével, mint egy jó párkeresővel, harmonikus családot teremteni.

Először is hozzuk létre az alkalmazás keretrendszerét. Bármilyen banális is, legyen ez egy blog.

Létrehoztunk egy alapstruktúrát, ahol:

  • A blog az alkalmazásunk tárolója;
  • Nézetek és sablonok – nézetek és sablonok tárolása;
  • Utility - megosztott könyvtárak tárháza;
  • index.php - bootstrap szkript;
  • Post - itt kell megtörténnie a Controller és a Model családi idilljének.

Az index.php-vel minden egyszerű:

fuss(); /* * index.php vége */

Meghatározzuk a szükséges útvonalakat, és létrehozunk egy automatikus betöltőt.
Az automatikus betöltő betölti a szükséges osztályokat, amelyek az osztálynévtérnek megfelelő mappahierarchiában helyezkednek el. Például a BlogPostServicesView osztályt a Blog/Post/Services mappában kell keresni.
És itt az első találkozás a Névtérrel.
Az index.php elindításakor létrehozzuk a Blog alkalmazás egy példányát, melynek osztálya a Blog/Blog.php fájlból töltődik be.
Nézzünk rá.

post = new Post(); ) public function run() ( $this->post->view->all(); ) )//end class Blog

A Blog osztály létrehozásakor beillesztünk egy Post osztályt a Namespace BlogPost segítségével, és az automatikus betöltő betölti a Blog/Post/Post.php fájlból.
Valószínűleg ezt az osztályt vezérlőnek nevezhetjük,

view = new View(); ) )//osztály vége Post

A Post entitás a következőket tartalmazza:
- magának az adatrekordnak a szerkezete - BlogPostEntitiesPostEntity.php

Vezérlőkéréseket kiszolgáló szolgáltatások - BlogPostServicesView.php (például az egyik szolgáltatás)

db = új DB(); )//end __construct public function all() ( $posts = $this->db->survey(); Contemplate::compose(array("header" => "fejléc", "main" => "fő", "footer" => "lábléc",), array("posts" => $posts, "title" => "Viper site")); ) )//end class PostView

Az adatbázis interakciós rendszer - BlogPostRepositoriesDB.php - itt van, vékony, elegáns modellünk,
Csak add, hozd, és semmi több!

dbh = new PDO("mysql:host=localhost;dbname=test", $user, $pass, array(PDO::ATTR_PERSISTENT => true)); ) catch (PDOException $e) ( echo "Hiba!: " . $e->getMessage() . "
"; die(); ) )//end __construct public function survey() ( $query_view = $this->dbh->prepare("SELECT * a bejegyzésekből"); $query_view->execute(); return $query_view- >fetchAll(PDO::FETCH_CLASS, "BlogPostEntitiesPostEntity"); )//felmérés vége )//Db osztály vége

Ennek eredményeként olyan alkalmazásstruktúrát tudtunk létrehozni, ahol minden komponens jól kapcsolódik, miközben az osztályok egyértelmű elkülönítését értük el, ahol minden osztály a saját feladatát látja el. A vezérlőnk vékony és ugyanakkor erős. A modell illik hozzá. Tökéletes család!
És mindezt a Namespace-nek köszönhetjük.

Nem vitatom, sok esetben kényelmes a keret. De nézd, a névtér nem emlékeztet semmire?
Világos osztályok felosztása, szigorú és egyben rugalmas címtárak és osztályok hierarchiája, teljesen alárendelve a fejlesztőnek.
Néha nincs ilyen jelentős kiegészítő több száz fájl és osztály formájában keretrendszer formájában.
Az osztályok és komponensek interakciójára vonatkozó Prokrusztész-féle szabályok hiánya.

A cikket Taylor Otwell, a Laravel-keretrendszer szerzője e témával kapcsolatos gondolatai ihlették, amit nagyon köszönünk neki.
A példa forráskódjának címe a GitHubon.

Helló. Mai cikkünkben megvizsgáljuk, mik azok a névterek a PHP-ben.

Ha már régóta használja OOP, akkor valószínűleg találkozott már olyan helyzettel, amikor egy harmadik féltől származó könyvtár csatlakoztatásakor hibába ütközött, mivel a kódjában már ugyanazokat az osztályneveket használja, mint a könyvtárban. Ez különösen akkor fordulhat elő, ha olyan általános neveket használ, mint pl "modell", "db" stb. Most elmondom, hogyan lehet ezt kijavítani.

Névtér- ez egyfajta tárhely, amelyet egyedi azonosítók (nevek) absztrakt csoportosítására hoztak létre.

Azok. ha használod névterek, akkor biztonságosan csatlakoztathatja harmadik féltől származó könyvtárakat, és ne féljen attól, hogy ugyanazok a nevek lesznek, mint a kódjában. Fejezzük be az elméletet, és folytassuk a gyakorlatot.

Hozzunk létre egy fájlt osztályom.php ezzel a tartalommal

névtér my\oneProject;
osztály MyClass ( )
?>

Itt létrehoztunk egy osztályt a névtérben my\oneProject. Egyébként pontosan a fordított perjelet kell írni. Ne keveredj össze!

Most fájlban index.phpírjuk a következőket

request_once("saját osztály.php");
$mc = new MyClass(); // Hiba: az osztály nem található
$mc = new my\oneProject\MyClass(); // minden működik
?>

Mint látható, most nem lehet csak úgy osztályt létrehozni, meg kell adni, hogy melyikben névtér lefekszik.

Többet is megadhatunk egyszerre névterek egy fájlban

névtér Projekt;

Const CONNECT_OK = 1;
osztály kapcsolat ( )
függvény connect() ( )

NamespaceAnotherProject;

Const CONNECT_OK = 1;
osztály kapcsolat ( )
függvény connect() ( )
?>

Annak ellenére, hogy az osztályoknak, függvényeknek és konstansoknak teljesen azonos neveink vannak, nem lesz névütközésünk, mert különböző terekben fekszenek.

Használhatunk zárójeles szintaxist is.

névtér projekt (

Const CONNECT_OK = 1;
osztály kapcsolat ( )
függvény connect() ( )
}

Névtér OtherProject (

Const CONNECT_OK = 1;
osztály kapcsolat ( )
függvény connect() ( )
}
?>

Ha kombinálja a kódot a globális névtér más szóközökben lévő kóddal, akkor csak a zárójeles szintaxist használjuk.

névtér projekt (

Const CONNECT_OK = 1;
osztály kapcsolat ( )
függvény connect() ( )
}

Névtér ( // globális kód
session_start();
$a = Project\connect();
echo Project\Connection::start();
}
?>

Ne felejtse el, hogy a névtér meghatározása mindig a kód első sora legyen. Ha így írsz, akkor hiba lesz

A konstans segítségével megtudhatja, melyik névtérben tartózkodik éppen __NAMESPACE__

névtér Projekt;
echo """, __NAMESPACE__, """; // kinyomtatja a "Project" kifejezést
?>

Ezzel az állandóval például dinamikusan szerkeszthet neveket

névtér Projekt;

Függvény incl($osztálynév) (
$a = __NAMESPACE__ . "\\" . $osztálynév;
visszatér új $a;
}
?>

Szóval mára ennyi. A tanfolyam elvégzésével több információhoz és gyakorlati tudáshoz juthat

Nemrég beágyaztam a projektemet egy névtérbe, és belefutottam a megfelelő dokumentáció hiányának problémájába. Minden, amit sikerült megtalálnunk, nagyjából 2009-ből származik, és ez már majdnem 2012... A talált anyagban nagyon sok olyan nem működő hely van, ahol olyasmit használnak, ami a php jelenlegi verziójában nincs meg. Ezzel kapcsolatban szeretném megvilágítani ezt a kérdést.
Tehát mi az a névtér vagy névtér? A nagy wikipédia így határozza meg őket:

A névtér egy halmaz, amely az egyedi azonosítók (vagyis nevek) logikai csoportosítására létrehozott modellt, absztrakt tárolót vagy környezetet jelent. A névtérben meghatározott azonosító ehhez a névtérhez van társítva. Ugyanaz az azonosító egymástól függetlenül definiálható több helyen. Így az egyik névtérben meghatározott azonosítóhoz társított érték ugyanazt (vagy inkább eltérő) jelentéssel bírhatja (vagy nem), mint egy másik névtérben meghatározott azonos azonosító. A névtér-tudatos nyelvek szabályokat határoznak meg, amelyek jelzik, hogy egy azonosító melyik névtérhez tartozik (vagyis a definíciójához).wiki

Minden tiszta? Valójában egyszerű. Az 5.3-as verzió előtt csak két szóköz volt a php-ben – a global (amelyben a fő kód futott) és a local (amelyben a függvényváltozók voltak meghatározva).

Az 5.3-as verzió óta minden megváltozott. Most megadhatja a névterét, amelyben az osztályok, metódusok stb.


Remélem kicsit világosabb lett.

Konkrétan ugyanígy neveztem el az osztályokat. Mivel különböző terekben vannak meghatározva, két különböző osztályról van szó, annak ellenére, hogy ugyanaz a neve. A fő szkript továbbra is a globális térben működik, itt semmi sem változott, osztályok és függvények továbbra is definiálhatók benne. Akkor mire valók a terek? Mindenekelőtt meg kell győződni arról, hogy amikor valamilyen keretrendszert vagy könyvtárat tartalmaz, az osztályok nem írják felül a keretrendszer osztályait, és fordítva.

A névtérben definiált osztályok használatához a definiált teret a megfelelő helyre kell importálni a globálisba (én ezt szoktam a fájl elején megtenni) Ehhez használd a use kulcsszót.

Figyelem: a php valamiért nem engedi a kulcsszó használatát használatállapotú blokkokban és hurkokban

Vegyük a példát a képekből, és valósítsuk meg kódban:

Figyelem: a névtér kulcsszónak a fájl legelején, közvetlenül utána kell lennie
fájl A.php
B.php fájl
Alternatív szintaxis lehetséges:
Javasoljuk, hogy minden névteret külön fájlban deklaráljon. Egyben ugyan lehetséges, de szigorúan nem ajánlott!
Most térjünk át a harmadik fájlra, amelyben a fő szkriptünk fog működni
index.php
Úgy tűnik, hogy ez előny, csak több kódot adnak hozzá, de ez nem teljesen igaz, kicsit tovább hozok egy példát egy autoload osztályra, amellyel a fájlokat osztályokkal összekötő sorok feleslegesek lesznek.
Most pedig nézzük az osztályainkat.

Figyelem: a hatókör felbontási operátor (::) használatával a php névterekben nem megengedett! Az egyetlen dolog, amire alkalmas, az a statikus osztálymetódusok és konstansok elérése. Először a névtérhez akarták használni, de aztán a felmerülő problémák miatt nem döntöttek. Ezért egy olyan konstrukció, mint az A::A::say(); érvénytelen, és hibához vezet.

A névterekhez a "\" fordított perjelet kell használni
Figyelem: A félreértések elkerülése érdekében ki kell hagyni ezt a karaktert, ha karakterláncokban használjuk: "\\"

A névterek egymásba ágyazhatók, tegyük hozzá az A.php fájlunkhoz:
az indexbe pedig a következőket írjuk:

Fontos szempont az álnevek használata az importált terekhez. Írhatsz A\subA::say(); Egyetértesz azzal, hogy nehéz minden alkalommal teljes elérési utat írni a szóközökhöz; ennek elkerülésére álneveket vezettünk be. Fordításkor a következő történik: az alias sub helyett A\subA lesz behelyettesítve, így az A\subA::say();

Mi történik akkor a globális térben meghatározott függvények meghívásakor? A PHP először azon a területen belül keres egy függvényt, ahol éppen dolgozik, és ha nem találja, akkor a globális hatókörbe lép. Annak érdekében, hogy azonnal jelezze, hogy globális függvényt használ, meg kell előznie egy fordított perjelet.

Az osztályok szóközökből történő automatikus betöltésével kapcsolatos problémák elkerülése érdekében a fájlrendszert a szóközök szervezéséhez hasonlóan kell megszervezni. Például van egy gyökérmappánk osztályaink, ahol az osztályaink kerülnek tárolásra, majd tereink a következőképpen rendezhetők
osztályok\A\A.php
classes\A\sub\A.php (az alterület külön fájlba kerül)
osztályok\B\B.php

A PHP-nek van egy __NAMESPACE__ mágikus állandója, amely az aktuális tér nevét tartalmazza.

És most az automatikus betöltésről.

A lenti osztály nem az enyém, csak működőképessé tettem és egy kicsit javítottam, innen vettem.
Figyelem: Az osztályok betöltéséhez az osztály nevének meg kell egyeznie a fájl nevével!

" .$file ." in " .$filepath)); if (file_exists($filepath)) ( if(Autoloader::debug) Autoloader::StPutFile(("connected" .$filepath)); $flag = FALSE; követelmény_egyszer($fájlútvonal); break; ) Autoloader::recursive_autoload($file, $path2, &$flag); ) ) closedir($handle); ) ) privát statikus függvény 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($file, LOCK_UN); fclose ($file); ) ) \spl_autoload_register("yourNameSpace\Autoloader::autoload"); )
Ha megnézi a betöltésre érkező osztályok nevét, látni fogja, hogy minden osztály előtt egy előtag szerepel a használatban megadott névtérből. Ezért azt javaslom, hogy a fájlok helyét a névtérhez hasonló könyvtárakban használjuk, ez egy-két iterációra gyorsítja a keresést.

Most az indexünket így írhatjuk fel:
Most az összes használt osztály és interfész automatikusan betöltődik.

A nyelv szóközökkel kapcsolatos dinamikus képességeinek bemutatásához deklaráljunk egy másik osztályt:
teszt.php

Index.php
sayName("teszt"); //vagy megteheti ezt a tesztet\sayName("teszt2"); //vagy így $obj::sayName("teszt"); //vagy elvégezheti ezt a tesztet::sayName("teszt2");

Remélem, hogy cikkem hasznos lesz valakinek.

(PHP 5 >= 5.3.0, PHP 7)

Mielőtt a névterek használatáról beszélnénk, fontos megérteni, hogy a PHP honnan tudja, hogy a kód melyik névteres elemet kéri. Egyszerű analógia tehető a PHP névterei és a fájlrendszer között. Háromféleképpen lehet hozzáférni egy fájlhoz egy fájlrendszerben:

  1. Relatív fájlnév pl foo.txt. Ez megoldja jelenlegikönyvtár/foo.txt ahol a currentdirectory az éppen foglalt könyvtár. Tehát ha az aktuális könyvtár az /home/foo, a név így alakul /home/foo/foo.txt.
  2. Relatív elérési út neve, mint alkönyvtár/foo.txt. Ez megoldja jelenlegikönyvtár/alkönyvtár/foo.txt.
  3. Abszolút útvonalnév, mint /main/foo.txt. Ez megoldja /main/foo.txt.
Ugyanez az elv alkalmazható a PHP névteres elemeire is. Például egy osztálynévre háromféleképpen hivatkozhatunk:
  1. Nem minősített név, vagy előtag nélküli osztálynév, mint pl $a = new foo(); vagy foo::staticmethod(); jelenlegi névtér, ez megoldja jelenleginévtér\foo foo. Egy figyelmeztetés: a függvények és konstansok minősítetlen nevei globális függvényekké és konstansokká fognak feloldódni, ha a névteres függvény vagy konstans nincs megadva. Részletekért lásd: A névterek használata: visszaállás a globális függvényre/konstansra.
  2. Minősített név, vagy előtaggal ellátott osztálynév, mint pl $a = új alnévtér\foo(); vagy alnévtér\foo::staticmethod();. Ha az aktuális névtér jelenlegi névtér, ez megoldja jelenleginévtér\alnévtér\foo. Ha a kód globális, nem névteres kód, akkor ez a következőre oldódik fel alnévtér\foo.
  3. Teljesen minősített név, vagy előtaggal ellátott név globális előtag operátorral, mint pl $a = new \currentnamespace\foo(); vagy \currentnamespace\foo::staticmethod();. Ez mindig a kódban megadott szó szerinti névre bontja fel, jelenleginévtér\foo.

Íme egy példa a háromféle szintaxisra a tényleges kódban:

névtér Foo\Bar\subnamespace;

const FOO = 1 ;
függvény foo()()
osztályú foo
{
}
?>

névtér Foo\Bar;
tartalmazza "file1.php" ;

const FOO = 2;
függvény foo()()
osztályú foo
{
statikus függvény staticmethod()()
}

/* Nem minősített név */
foo(); foo::staticmethod(); echo FOO ;

/* Minősített név */
alnévtér\foo(); // feloldja a Foo\Bar\subnamespace\foo függvényt
alnévtér\foo::staticmethod(); // feloldja a Foo\Bar\subnamespace\foo osztályt,
// metódus staticmethod
echo alnévtér\FOO; // feloldása a Foo\Bar\subnamespace\FOO konstansra

/* Teljesen minősített név */
\foo\bar\foo(); // feloldja a Foo\Bar\foo függvényt
\foo\Bar\foo::staticmethod(); // feloldja a Foo\Bar\foo osztályt, staticmethod metódus
echo\Foo\Bar\FOO; // feloldja a Foo\Bar\FOO állandót
?>

Vegye figyelembe, hogy bármely globális osztály, függvény vagy konstans eléréséhez egy teljesen minősített név használható, mint pl \strlen() vagy \Kivétel vagy \INI_ALL. ?>