Příklady použití jmenného prostoru v php. Jmenné prostory v PHP, vysvětleno. Jmenné prostory: Více rozsahů popisu

Nedávno jsem svůj projekt zapouzdřil do jmenného prostoru a narazil jsem na problém nedostatku správné dokumentace. Vše, co se nám podařilo najít, pochází přibližně z roku 2009, a to je téměř rok 2012... V nalezeném materiálu je spousta nefunkčních míst, která používají něco, co v aktuální verzi php není. V tomto ohledu bych rád tuto problematiku trochu osvětlil.
Co je tedy jmenný prostor nebo jmenný prostor? Velká wikipedie je definuje takto:

Namespace je množina, která znamená model, abstraktní úložiště nebo prostředí vytvořené pro logické seskupování jedinečných identifikátorů (tedy jmen). Identifikátor definovaný ve jmenném prostoru je přidružen k tomuto jmennému prostoru. Stejný identifikátor může být nezávisle definován ve více prostorech. Hodnota spojená s identifikátorem definovaným v jednom jmenném prostoru tedy může (nebo nemusí) mít stejný (nebo spíše odlišný) význam jako stejný identifikátor definovaný v jiném jmenném prostoru. Jazyky využívající jmenný prostor definují pravidla, která označují, do kterého jmenného prostoru identifikátor patří (tedy jeho definice).wiki

Vše jasné? Je to vlastně jednoduché. Před verzí 5.3 byly v php pouze dva prostory – globální (ve kterém byl spouštěn váš hlavní kód) a lokální (ve kterém byly definovány funkční proměnné).

Od verze 5.3 se vše změnilo. Nyní můžete definovat svůj jmenný prostor, ve kterém budou existovat vaše třídy, metody atd.


Doufám, že to bylo trochu jasnější.

Konkrétně jsem třídy pojmenoval stejně. Protože jsou definovány v různých prostorech, jedná se o dvě různé třídy, navzdory stejným jménům. Hlavní skript stále funguje v globálním prostoru, nic se zde nezměnilo a stále v něm lze definovat třídy a funkce. K čemu jsou tedy prostory? Za prvé, abyste se ujistili, že když zahrnete soubor s nějakým rámcem nebo knihovnou, vaše třídy nepřepíší třídy rámce nebo naopak.

Abyste mohli používat třídy definované ve vašem jmenném prostoru, musíte vámi definovaný prostor importovat do globálního na správném místě (obvykle to dělám na začátku souboru). K tomu použijte klíčové slovo use

Pozornost: z nějakého důvodu php neumožňuje použití klíčového slova použití ve stavových blocích a smyčkách

Vezměme příklad z obrázků a implementujeme jej do kódu:

Pozornost: klíčové slovo jmenného prostoru musí být umístěno na samém začátku souboru, hned za ním
soubor A.php
soubor B.php
Je možná alternativní syntaxe:
Doporučuje se deklarovat každý jmenný prostor v samostatném souboru. I když je to možné v jednom, přísně se to nedoporučuje!
Nyní se přesuneme ke třetímu souboru, ve kterém bude fungovat náš hlavní skript
index.php
Zdálo by se, že je to výhoda, jen se přidává další kód, ale není to tak úplně pravda, o kousek dále uvedu příklad autoload třídy, se kterou budou řádky spojující soubory s třídami zbytečné.
Nyní se podívejme na naše třídy.

Pozornost: pomocí operátoru rozlišení rozsahu (::) ve jmenných prostorech php nepovoleno! Jediné, k čemu se hodí, je přístup k metodám a konstantám statických tříd. Nejprve jej chtěli použít pro jmenný prostor, ale pak se rozhodli proti němu kvůli problémům, které nastaly. Proto konstrukce jako A::A::say(); je neplatný a bude mít za následek chybu.

Pro jmenné prostory musíte použít znak zpětného lomítka "\"
Pozornost: Aby nedocházelo k nedorozuměním, je nutné tento znak při použití v řetězcích zakódovat: "\\"

Jmenné prostory mohou být vnořeny do sebe, přidejte do našeho souboru A.php:
a do indexu zapíšeme následující:

Důležitým bodem je použití aliasů pro importované prostory. Můžete napsat A\subA::say(); Souhlasíte s tím, že je obtížné pokaždé psát úplné cesty k mezerám, aby se tomu zabránilo, byly zavedeny aliasy. Při kompilaci se stane následující: místo aliasu sub bude nahrazeno A\subA, takže dostaneme volání A\subA::say();

Co se pak stane při volání funkcí definovaných v globálním prostoru? PHP nejprve hledá funkci v prostoru, kde právě pracujete, a pokud ji nenajde, přejde do globálního rozsahu. Aby bylo možné okamžitě označit, že používáte globální funkci, musíte před ni uvést zpětné lomítko.

Aby se předešlo problémům s automatickým načítáním tříd z prostorů, musí být souborový systém organizován podobně jako organizace prostorů. Například máme kořenovou složku tříd, kde budou naše třídy uloženy, pak mohou být naše prostory organizovány následovně
třídy\A\A.php
class\A\sub\A.php (podprostor bude umístěn v samostatném souboru)
třídy\B\B.php

PHP má magickou konstantu __NAMESPACE__, která obsahuje název aktuálního prostoru.

A nyní o automatickém načítání.

Třída níže není moje, jen jsem ji zprovoznil a trochu vylepšil, převzato odtud.
Pozornost: Aby se vaše třídy načetly, musí se název třídy shodovat s názvem souboru!

".$file." v " .$filepath)); if (file_exists($filepath)) ( if(Autoloader::debug) Autoloader::StPutFile(("připojeno " .$filepath)); $flag = FALSE; required_once($filepath); break; ) Autoloader::recursive_autoload($file, $path2, &$flag); ) ) closedir($handle); ) ) soukromá statická funkce 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($soubor, LOCK_UN); fclose ($soubor); ) ) \spl_autoload_register("vaseNameSpace\Autoloader::autoload"); )
Pokud se podíváte na názvy tříd, které přicházejí k načtení, uvidíte, že každé třídě předchází předpona z jmenného prostoru, který je určen v použití. Proto doporučuji používat umístění souborů v adresářích podobných jmennému prostoru, urychlí to hledání na jednu až dvě iterace.

Nyní lze náš index zapsat takto:
Nyní se automaticky načtou všechny třídy a rozhraní, která budete používat.

Abychom demonstrovali některé dynamické schopnosti jazyka s mezerami, deklarujme další třídu:
test.php

Index.php
sayName("test"); //nebo můžete provést tento test\sayName("test2"); //nebo takto $obj::sayName("test"); //nebo můžete provést tento test::sayName("test2");

Doufám, že můj článek bude pro někoho užitečný.

PHP, počínaje verzí 5.3, nám poskytlo jmenné prostory. Od té doby se vedly nějaké pomalé a vášnivé diskuse o tom, jak tento jmenný prostor používat?
Některé frameworky, jako Symphony, Laravel a samozřejmě Zend, tuto technologii přijaly.
To vše víceméně zapadá do schématu MVC. Zůstává jedna, pravděpodobně věčná, debata: jaký by měl být hlavní manželský pár aplikace - Model a Controller?
Někteří nám říkají, že Modelka by měla být statná a tlustá as ní štíhlá a hubená Kontrolorka. Jedním slovem - matriarchát.
Jiní se naopak domnívají, že Ovladač musí vše řídit a velet, takže se ukazuje jako solidní a dobře živený. A s ním je hubený, štíhlý Model, jehož úkolem je dávat a přinášet. Toto je patriarchát.
Co je tedy lepší ve schématu MVC? Patriarchát nebo matriarchát?
Podívejme se na to z pohledu budování rodinné jednotky založené na demokracii. A nechť nám s tím Namespace pomůže.

Nemáme rádi tlusté, neohrabané ovladače, které jako býk v porcelánu dokážou při neopatrnosti rozdrtit celou aplikaci.
Ani my nemáme rádi tlusté Modelky. No, kdo je má rád? Musí být hodni stupně vítězů!
Zkusme s pomocí Namespace, jako s dobrým dohazovačem, vytvořit harmonickou rodinu.

Nejprve vytvoříme aplikační framework. Ať je to jakkoli banální, ať je to blog.

Vytvořili jsme základní strukturu, kde:

  • Blog je úložiště naší aplikace;
  • Views and Templates - ukládání pohledů a šablon;
  • Utility - úložiště sdílených knihoven;
  • index.php - bootstrap skript;
  • Příspěvek - zde by se měla odehrát rodinná idylka Ovladače a Modelky.

S index.php je vše jednoduché:

běh(); /* * konec indexu.php */

Určíme potřebné cesty a vytvoříme autoloader.
Autoloader načte požadované třídy, které jsou umístěny v hierarchii složek podle jmenného prostoru třídy. Třída BlogPostServicesView by se například hledala v Blog/Post/Services.
A je tu první setkání s Namespace.
Když spustíme index.php, vytvoříme instanci aplikace Blog, jejíž třída se načte z Blog/Blog.php.
Podívejme se na něj.

příspěvek = nový příspěvek(); ) public function run() ( $this->post->view->all(); ) )//end class Blog

Při vytváření třídy Blog do ní vložíme třídu Post pomocí Namespace BlogPost a autoloader ji načte z Blog/Post/Post.php.
Pravděpodobně lze tuto třídu nazvat Controller,

view = new View(); ) )//ukončit třídu Post

Entita Post zahrnuje:
- struktura samotného datového záznamu - BlogPostEntitiesPostEntity.php

Služby obsluhující požadavky řadiče – BlogPostServicesView.php (například jedna ze služeb)

db = new DB(); )//end __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

Systém interakce s databází - BlogPostRepositoriesDB.php - tady to je, náš tenký, elegantní model,
Jen to dej, přines a nic víc!

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 příspěvků"); $query_view->execute(); return $query_view- >fetchAll(PDO::FETCH_CLASS, "BlogPostEntitiesPostEntity"); )//ukončit průzkum )//ukončit třídu Db

Díky tomu jsme byli schopni vytvořit aplikační strukturu, kde jsou všechny komponenty dobře propojeny, a zároveň jsme dosáhli jasného oddělení tříd, kde každá třída plní svůj vlastní úkol. Náš ovladač je tenký a zároveň výkonný. Model mu odpovídá. Perfektní rodinka!
A to vše díky Namespace.

Nehádám se, v mnoha případech je rámec pohodlný. Ale podívejte, Namespace vám nic nepřipomíná?
Jasné rozdělení do tříd, přísná a zároveň flexibilní hierarchie adresářů a tříd, zcela podřízená vývojáři.
Někdy chybí takový významný doplněk v podobě stovek souborů a tříd ve formě frameworku.
Absence Prokrustova lůžka pravidel pro interakci tříd a komponent.

Článek byl inspirován myšlenkami na toto téma Taylora Otwella, autora frameworku Laravel, za což mu patří velký dík.
Adresa ukázkového zdrojového kódu na GitHubu.

Ahoj. V dnešním článku se podíváme na to, co jsou jmenné prostory v PHP.

Pokud jej používáte delší dobu OOP, pak jste se pravděpodobně setkali se situací, kdy při připojování knihovny třetí strany došlo k selhání kvůli skutečnosti, že v kódu již používáte stejné názvy tříd jako v knihovně. To se může stát zejména, pokud používáte běžné názvy jako "Modelka", "db" a tak dále. Nyní vám řeknu, jak to opravit.

Jmenný prostor- jedná se o jakési úložiště vytvořené pro abstraktní seskupování jedinečných identifikátorů (názvů).

Tito. pokud používáte jmenné prostory, pak můžete bezpečně připojit knihovny třetích stran a nebát se, že budou mít stejné názvy jako ve vašem kódu. Skončeme teorií a přejděme k praxi.

Vytvoříme soubor mojetřída.php s tímto obsahem

jmenný prostor my\oneProject;
třída MyClass ( )
?>

Zde jsme vytvořili třídu ve jmenném prostoru my\oneProject. Mimochodem, musíte napsat přesně zpětné lomítko. Nenechte se zmást!

Nyní v souboru index.php napíšeme následující

require_once("myclass.php");
$mc = new MyClass(); // Chyba: třída nenalezena
$mc = new my\oneProject\MyClass(); // vše funguje
?>

Jak vidíte, nyní není možné vytvořit třídu jen tak, musíte určit ve které jmenný prostor on leží.

Můžeme jich specifikovat několik najednou jmenné prostory v jednom souboru

projekt jmenného prostoru;

Const CONNECT_OK = 1;
připojení třídy ( )
funkce connect() ( )

Jmenný prostorJinýProjekt;

Const CONNECT_OK = 1;
připojení třídy ( )
funkce connect() ( )
?>

Navzdory tomu, že máme naprosto totožné názvy tříd, funkcí a konstant, nebudeme mít konflikt jmen, protože leží v různých prostorách.

Můžeme také použít syntaxi hranatých závorek.

projekt jmenného prostoru (

Const CONNECT_OK = 1;
připojení třídy ( )
funkce connect() ( )
}

Namespace AnotherProject (

Const CONNECT_OK = 1;
připojení třídy ( )
funkce connect() ( )
}
?>

Pokud zkombinujete kód do globální jmenný prostor s kódem v jiných prostorech, pak se použije pouze syntaxe se závorkami.

projekt jmenného prostoru (

Const CONNECT_OK = 1;
připojení třídy ( )
funkce connect() ( )
}

Jmenný prostor ( // globální kód
session_start();
$a = Project\connect();
echo Project\Connection::start();
}
?>

Také nezapomeňte, že definování jmenného prostoru by mělo být vždy na prvním řádku kódu. Pokud to napíšete takto, bude chyba

Chcete-li zjistit, ve kterém jmenném prostoru se právě nacházíte, můžete použít konstantu __NAMESPACE__

projekt jmenného prostoru;
echo "", __NAMESPACE__, """; // vypíše "Projekt"
?>

Pomocí této konstanty můžete například dynamicky vytvářet názvy

projekt jmenného prostoru;

Funkce incl($classname) (
$a = __NAMESPACE__ . "\\". $název třídy;
vrátit nové $a;
}
?>

Tak to je pro dnešek vše. Absolvováním kurzu získáte další informace a praktické znalosti

Nedávno jsem svůj projekt zapouzdřil do jmenného prostoru a narazil jsem na problém nedostatku správné dokumentace. Vše, co se nám podařilo najít, pochází přibližně z roku 2009, a to je téměř rok 2012... V nalezeném materiálu je spousta nefunkčních míst, která používají něco, co v aktuální verzi php není. V tomto ohledu bych rád tuto problematiku trochu osvětlil.
Co je tedy jmenný prostor nebo jmenný prostor? Velká wikipedie je definuje takto:

Namespace je množina, která znamená model, abstraktní úložiště nebo prostředí vytvořené pro logické seskupování jedinečných identifikátorů (tedy jmen). Identifikátor definovaný ve jmenném prostoru je přidružen k tomuto jmennému prostoru. Stejný identifikátor může být nezávisle definován ve více prostorech. Hodnota spojená s identifikátorem definovaným v jednom jmenném prostoru tedy může (nebo nemusí) mít stejný (nebo spíše odlišný) význam jako stejný identifikátor definovaný v jiném jmenném prostoru. Jazyky využívající jmenný prostor definují pravidla, která označují, do kterého jmenného prostoru identifikátor patří (tedy jeho definice).wiki

Vše jasné? Je to vlastně jednoduché. Před verzí 5.3 byly v php pouze dva prostory – globální (ve kterém byl spouštěn váš hlavní kód) a lokální (ve kterém byly definovány funkční proměnné).

Od verze 5.3 se vše změnilo. Nyní můžete definovat svůj jmenný prostor, ve kterém budou existovat vaše třídy, metody atd.


Doufám, že to bylo trochu jasnější.

Konkrétně jsem třídy pojmenoval stejně. Protože jsou definovány v různých prostorech, jedná se o dvě různé třídy, navzdory stejným jménům. Hlavní skript stále funguje v globálním prostoru, nic se zde nezměnilo a stále v něm lze definovat třídy a funkce. K čemu jsou tedy prostory? Za prvé, abyste se ujistili, že když zahrnete soubor s nějakým rámcem nebo knihovnou, vaše třídy nepřepíší třídy rámce nebo naopak.

Abyste mohli používat třídy definované ve vašem jmenném prostoru, musíte vámi definovaný prostor importovat do globálního na správném místě (obvykle to dělám na začátku souboru). K tomu použijte klíčové slovo use

Pozornost: z nějakého důvodu php neumožňuje použití klíčového slova použití ve stavových blocích a smyčkách

Vezměme příklad z obrázků a implementujeme jej do kódu:

Pozornost: klíčové slovo jmenného prostoru musí být umístěno na samém začátku souboru, hned za ním
soubor A.php
soubor B.php
Je možná alternativní syntaxe:
Doporučuje se deklarovat každý jmenný prostor v samostatném souboru. I když je to možné v jednom, přísně se to nedoporučuje!
Nyní se přesuneme ke třetímu souboru, ve kterém bude fungovat náš hlavní skript
index.php
Zdálo by se, že je to výhoda, jen se přidává další kód, ale není to tak úplně pravda, o kousek dále uvedu příklad autoload třídy, se kterou budou řádky spojující soubory s třídami zbytečné.
Nyní se podívejme na naše třídy.

Pozornost: pomocí operátoru rozlišení rozsahu (::) ve jmenných prostorech php nepovoleno! Jediné, k čemu se hodí, je přístup k metodám a konstantám statických tříd. Nejprve jej chtěli použít pro jmenný prostor, ale pak se rozhodli proti němu kvůli problémům, které nastaly. Proto konstrukce jako A::A::say(); je neplatný a bude mít za následek chybu.

Pro jmenné prostory musíte použít znak zpětného lomítka "\"
Pozornost: Aby nedocházelo k nedorozuměním, je nutné tento znak při použití v řetězcích zakódovat: "\\"

Jmenné prostory mohou být vnořeny do sebe, přidejte do našeho souboru A.php:
a do indexu zapíšeme následující:

Důležitým bodem je použití aliasů pro importované prostory. Můžete napsat A\subA::say(); Souhlasíte s tím, že je obtížné pokaždé psát úplné cesty k mezerám, aby se tomu zabránilo, byly zavedeny aliasy. Při kompilaci se stane následující: místo aliasu sub bude nahrazeno A\subA, takže dostaneme volání A\subA::say();

Co se pak stane při volání funkcí definovaných v globálním prostoru? PHP nejprve hledá funkci v prostoru, kde právě pracujete, a pokud ji nenajde, přejde do globálního rozsahu. Aby bylo možné okamžitě označit, že používáte globální funkci, musíte před ni uvést zpětné lomítko.

Aby se předešlo problémům s automatickým načítáním tříd z prostorů, musí být souborový systém organizován podobně jako organizace prostorů. Například máme kořenovou složku tříd, kde budou naše třídy uloženy, pak mohou být naše prostory organizovány následovně
třídy\A\A.php
class\A\sub\A.php (podprostor bude umístěn v samostatném souboru)
třídy\B\B.php

PHP má magickou konstantu __NAMESPACE__, která obsahuje název aktuálního prostoru.

A nyní o automatickém načítání.

Třída níže není moje, jen jsem ji zprovoznil a trochu vylepšil, převzato odtud.
Pozornost: Aby se vaše třídy načetly, musí se název třídy shodovat s názvem souboru!

".$file." v " .$filepath)); if (file_exists($filepath)) ( if(Autoloader::debug) Autoloader::StPutFile(("připojeno " .$filepath)); $flag = FALSE; required_once($filepath); break; ) Autoloader::recursive_autoload($file, $path2, &$flag); ) ) closedir($handle); ) ) soukromá statická funkce 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($soubor, LOCK_UN); fclose ($soubor); ) ) \spl_autoload_register("vaseNameSpace\Autoloader::autoload"); )
Pokud se podíváte na názvy tříd, které přicházejí k načtení, uvidíte, že každé třídě předchází předpona z jmenného prostoru, který je určen v použití. Proto doporučuji používat umístění souborů v adresářích podobných jmennému prostoru, urychlí to hledání na jednu až dvě iterace.

Nyní lze náš index zapsat takto:
Nyní se automaticky načtou všechny třídy a rozhraní, která budete používat.

Abychom demonstrovali některé dynamické schopnosti jazyka s mezerami, deklarujme další třídu:
test.php

Index.php
sayName("test"); //nebo můžete provést tento test\sayName("test2"); //nebo takto $obj::sayName("test"); //nebo můžete provést tento test::sayName("test2");

Doufám, že můj článek bude pro někoho užitečný.

(PHP 5 >= 5.3.0, PHP 7)

Než budeme diskutovat o použití jmenných prostorů, je důležité porozumět tomu, jak PHP ví, který prvek jmenného prostoru požaduje váš kód. Mezi jmennými prostory PHP a souborovým systémem lze udělat jednoduchou analogii. Existují tři způsoby přístupu k souboru v souborovém systému:

  1. Relativní název souboru jako foo.txt. Toto řeší aktuální adresář/foo.txt kde currentdirectory je aktuálně obsazený adresář. Pokud je tedy aktuální adresář /home/foo, název řeší na /home/foo/foo.txt.
  2. Relativní název cesty jako podadresář/foo.txt. Toto řeší aktuální adresář/podadresář/foo.txt.
  3. Absolutní název cesty jako /main/foo.txt. Toto řeší /main/foo.txt.
Stejný princip lze aplikovat na elementy se jmenným prostorem v PHP. Například na název třídy lze odkazovat třemi způsoby:
  1. Nekvalifikovaný název nebo název třídy bez předpony $a = new foo(); nebo foo::staticmetoda(); aktuální jmenný prostor, to řeší aktuální jmenný prostor\foo foo. Jedno upozornění: nekvalifikované názvy funkcí a konstant se převedou na globální funkce a konstanty, pokud funkce nebo konstanta s prostorem názvů není definována. Podrobnosti viz Používání jmenných prostorů: přechod na globální funkci/konstantu.
  2. Kvalifikovaný název nebo název třídy s předponou $a = nový podjmenný prostor\foo(); nebo subnamespace\foo::staticmethod();. Pokud je aktuální jmenný prostor aktuální jmenný prostor, to řeší aktuální jmenný prostor\podnázvový prostor\foo. Pokud je kód globální, bez jmenného prostoru, vyřeší se to podjmenný prostor\foo.
  3. Plně kvalifikovaný název nebo název s předponou s operátorem globální předpony $a = nový \aktuální jmenný prostor\foo(); nebo \currentnamespace\foo::staticmethod();. To se vždy převede na doslovný název uvedený v kódu, aktuální jmenný prostor\foo.

Zde je příklad tří druhů syntaxe ve skutečném kódu:

jmenný prostor Foo\Bar\subnamespace;

const FOO = 1;
funkce foo()()
třída foo
{
}
?>

jmenný prostor Foo\Bar;
zahrnout "soubor1.php" ;

const FOO = 2;
funkce foo()()
třída foo
{
statická funkce staticmethod()()
}

/* Nekvalifikované jméno */
foo(); foo::staticmetoda(); echo FOO ;

/* Kvalifikovaný název */
podjmenný prostor\foo(); // převede na funkci Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // převede na třídu Foo\Bar\subnamespace\foo,
// metoda statická metoda
echo podjmenný prostor\FOO; // převede na konstantní Foo\Bar\subnamespace\FOO

/* Plně kvalifikovaný název */
\foo\bar\foo(); // převede na funkci Foo\Bar\foo
\foo\Bar\foo::staticmetoda(); // převede na třídu Foo\Bar\foo, metoda staticmethod
echo\Foo\Bar\FOO; // převede na konstantní Foo\Bar\FOO
?>

Všimněte si, že pro přístup k jakékoli globální třídě, funkci nebo konstantě lze použít plně kvalifikovaný název, jako např \strlen() nebo \Výjimka nebo \INI_ALL. ?>