<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.namespaces.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'language.namespaces.faq.php',
    1 => 'FAQ',
    2 => 'Часто задаваемые вопросы (FAQ): что нужно знать о пространствах имён',
  ),
  'up' => 
  array (
    0 => 'language.namespaces.php',
    1 => 'Пространства имён',
  ),
  'prev' => 
  array (
    0 => 'language.namespaces.rules.php',
    1 => 'Правила разрешения имён',
  ),
  'next' => 
  array (
    0 => 'language.enumerations.php',
    1 => 'Перечисления',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'language/namespaces.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.namespaces.faq" class="sect1">
  <h2 class="title">Часто задаваемые вопросы (FAQ): что нужно знать о пространствах имён</h2>
  
  <p class="verinfo">(PHP 5 &gt;= 5.3.0, PHP 7, PHP 8)</p>
  <p class="para">
   Этот список вопросов разделён на две части: общие вопросы и некоторые особенности
   реализации, которые полезны для полного понимания.
  </p>
  <p class="para">
   Вначале общие вопросы.
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.shouldicare" class="link">Если в коде не указаны пространства имён, нужно
       ли считать что-либо из этого важным?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.globalclass" class="link">Как обращаться к внутренним или глобальным
       классам в пространстве имён?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.innamespace" class="link">Как обращаться к функциям классов в
       пространствах имён, или константам в их пространстве имён?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.full" class="link">
       Как разрешаются имена <code class="literal">\my\name</code> или <code class="literal">\name</code>?
      </a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.qualified" class="link">Как разрешается имя <code class="literal">my\name</code>?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.shortname1" class="link">Как разрешается неполное имя класса <code class="literal">name</code>?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.shortname2" class="link">Как разрешается неполное имя функции
       или неполное имя константы наподобие <code class="literal">name</code>?</a>
     </span>
    </li>
   </ol>
  </p>
  <p class="para">
   Некоторые детали реализации пространств имён, которые
   полезно понимать.
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.conflict" class="link">Импортируемые имена не должны конфликтовать с
       классами, определёнными в том же файле.</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.nested" class="link">Вложенные пространства имён недопустимы.
      </a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.quote" class="link">Динамические имена пространств имён (идентификаторы,
       взятые в кавычки) должны экранировать символ обратного слеша.</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.constants" class="link">Ссылаться на неопределённые константы,
       используя обратный слеш, нельзя. Выводится фатальная ошибка</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.builtinconst" class="link">Невозможно переопределить специальные
       константы <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> или <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></a>
     </span>
    </li>
   </ol>
  </p>
  <div class="sect2" id="language.namespaces.faq.shouldicare">
   <h3 class="title">Если в коде не указаны пространства имён, нужно ли считать что-либо из этого важным?</h3>
   <p class="para">
    Нет, пространства имён не влияют ни на тот код, который уже написали,
    ни на ещё ненаписанный код без пространств имён. Разрешается писать
    такой код, если нужно:
   </p>
   <p class="para">
    <div class="example" id="example-1">
     <p><strong>Пример #1 Доступ к глобальным классам вне пространства имён</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">\stdClass</span><span style="color: #007700">;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    Функционально это эквивалентно следующему:
   </p>
   <p class="para">
    <div class="example" id="example-2">
     <p><strong>Пример #2 Доступ к глобальным классам вне пространства имён</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">();</span></span></code></div>
      </div>

     </div>
    </p>
   </div>
   <div class="sect2" id="language.namespaces.faq.globalclass">
    <h3 class="title">Как обращаться к внутренним или глобальным классам в пространстве имён?</h3>
    <p class="para">
     <div class="example" id="example-3">
      <p><strong>Пример #3 Доступ ко внутренним классам в пространствах имён</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">\stdClass</span><span style="color: #007700">();<br /><br />function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">\ArrayObject $parameter_type_example </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) {}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\DirectoryIterator</span><span style="color: #007700">::</span><span style="color: #0000BB">CURRENT_AS_FILEINFO</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Расширение внутреннего или глобального класса<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyException </span><span style="color: #007700">extends </span><span style="color: #0000BB">\Exception </span><span style="color: #007700">{}</span></span></code></div>
      </div>

     </div>
    </p>
   </div>
   <div class="sect2" id="language.namespaces.faq.innamespace">
    <h3 class="title">
     Как использовать функции классов в пространствах имён или
     константы в их собственном пространстве имён?
    </h3>
    <p class="para">
     <div class="example" id="example-4">
      <p><strong>Пример #4 Доступ ко внутренним классам, функциям или константам в пространствах имён</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{}<br /><br /></span><span style="color: #FF8000">// Определение класса текущего пространства имён в качестве типа параметра<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">MyClass $parameter_type_example </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) {}<br /><br /></span><span style="color: #FF8000">// Другой способ определить класс из текущего пространства имён в качестве типа параметра<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">\foo\MyClass $parameter_type_example </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) {}<br /><br /></span><span style="color: #FF8000">// Расширение класса из текущего пространства имён<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Extended </span><span style="color: #007700">extends </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{}<br /><br /></span><span style="color: #FF8000">// Доступ к глобальной функции<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\globalfunc</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// Доступ к глобальной константе<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">\INI_ALL</span><span style="color: #007700">;</span></span></code></div>
      </div>

     </div>
    </p>
   </div>
   <div class="sect2" id="language.namespaces.faq.full">
    <h3 class="title">
     Как разрешаются имена наподобие <code class="literal">\my\name</code>
     или <code class="literal">\name</code>?
    </h3>
    <p class="para">
     Имена, которые начинаются с обратного слеша <code class="literal">\</code>, разрешаются в названия,
     на которые сами похожи, поэтому имя <code class="literal">\my\name</code> разрешается в название <code class="literal">my\name</code>,
     а имя <code class="literal">\Exception</code> — в <code class="literal">Exception</code>.
     <div class="example" id="example-5">
      <p><strong>Пример #5 Абсолютные имена</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">\my\name</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Создаёт экземпляр класса my\name<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">\strlen</span><span style="color: #007700">(</span><span style="color: #DD0000">'hi'</span><span style="color: #007700">); </span><span style="color: #FF8000">// Вызывает функцию strlen<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\INI_ALL</span><span style="color: #007700">; </span><span style="color: #FF8000">// Переменной $a присваивается значение константы INI_ALL</span></span></code></div>
      </div>

     </div>
    </p>
   </div>
   <div class="sect2" id="language.namespaces.faq.qualified">
    <h3 class="title">Как разрешается имя <code class="literal">my\name</code>?</h3>
    <p class="para">
     Имена наподобие <code class="literal">my\name</code>, — которые содержат обратный слеш,
     но не начинаются с него, — разрешаются двумя способами.
    </p>
    <p class="para">
     Уровень <code class="literal">my</code> в имени <code class="literal">my\name</code> заменяется псевдонимом,
     если уровню <code class="literal">my</code> присвоили псевдоним с другим именем, которое импортировали инструкцией use.
    </p>
    <p class="para">
     В остальных случаях перед именем <code class="literal">my\name</code> добавляется название текущего пространства имён.
    </p>
    <p class="para">
     <div class="example" id="example-6">
      <p><strong>Пример #6 Полные имена</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br />use </span><span style="color: #0000BB">blah\blah </span><span style="color: #007700">as </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">my\name</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Создаёт экземпляр класса foo\my\name<br /></span><span style="color: #0000BB">foo\bar</span><span style="color: #007700">::</span><span style="color: #0000BB">name</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Вызывает статический метод name, который определили в классе blah\blah\bar<br /></span><span style="color: #0000BB">my\bar</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Вызывает функцию foo\my\bar<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">my\BAR</span><span style="color: #007700">; </span><span style="color: #FF8000">// Присваивает переменной $a значение константы foo\my\BAR</span></span></code></div>
      </div>

     </div>
    </p>
   </div>
   <div class="sect2" id="language.namespaces.faq.shortname1">
    <h3 class="title">Как разрешается неполное имя класса вроде <code class="literal">name</code>?</h3>
    <p class="para">
     Названия классов наподобие <code class="literal">name</code>, — которые не содержат обратного слеша, —
     разрешаются двумя способами.
    </p>
    <p class="para">
     Название класса заменяется псевдонимом,
     если имени <code class="literal">name</code> присвоили псевдоним с другим именем, которое импортировали инструкцией use.
    </p>
    <p class="para">
     В остальных случаях к имени <code class="literal">name</code> добавляется текущее название пространства имён.
    </p>
    <p class="para">
     <div class="example" id="example-7">
      <p><strong>Пример #7 Неполные имена классов</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br />use </span><span style="color: #0000BB">blah\blah </span><span style="color: #007700">as </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">name</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Создаёт экземпляр класса foo\name<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">::</span><span style="color: #0000BB">name</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Вызывает статический метод name, который определили в классе blah\blah</span></span></code></div>
      </div>

     </div>
    </p>
   </div>
   <div class="sect2" id="language.namespaces.faq.shortname2">
    <h3 class="title">
     Как разрешается неполное название функции или неполное имя константы вроде <code class="literal">name</code>?
    </h3>
    <p class="para">
     Названия функций или констант наподобие <code class="literal">name</code>, —
     которые не содержат обратного слеша, — разрешаются двумя способами.
    </p>
    <p class="para">
     Вначале перед именем <code class="literal">name</code> добавляется текущее название пространства имён.
    </p>
    <p class="para">
     Затем, если текущее пространство имён не содержит названия константы
     или функции с именем <code class="literal">name</code>, вызывается
     глобальная константа или функция с названием <code class="literal">name</code>,
     если константу или функцию с таким названием определили в глобальном пространстве имён.
    </p>
    <p class="para">
     <div class="example" id="example-8">
      <p><strong>Пример #8 Неполные имена функций или констант</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br />use </span><span style="color: #0000BB">blah\blah </span><span style="color: #007700">as </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br />const </span><span style="color: #0000BB">FOO </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">my</span><span style="color: #007700">() {}<br />function </span><span style="color: #0000BB">foo</span><span style="color: #007700">() {}<br /><br />function </span><span style="color: #0000BB">sort</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$a</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">\sort</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">); </span><span style="color: #FF8000">// Вызывает глобальную функцию sort<br />    </span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">array_flip</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br />    return </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">my</span><span style="color: #007700">(); </span><span style="color: #FF8000">// вызывает функцию foo\my<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #DD0000">'hi'</span><span style="color: #007700">); </span><span style="color: #FF8000">// Вызывает глобальную функцию strlen, потому что функцию foo\strlen не определили<br /><br /></span><span style="color: #0000BB">$arr </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">,];<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">sort</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr</span><span style="color: #007700">); </span><span style="color: #FF8000">// Вызывает функцию foo\sort<br /><br /></span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">foo</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Вызывает функцию foo\foo, без импорта<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// Присваивает переменной $a значение константы foo\FOO, без импорта<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">INI_ALL</span><span style="color: #007700">; </span><span style="color: #FF8000">// Присваивает переменной $b значение глобальной константы INI_ALL</span></span></code></div>
      </div>

     </div>
    </p>
   </div>
   <div class="sect2" id="language.namespaces.faq.conflict">
    <h3 class="title">Импортируемым именам нельзя конфликтовать с классами, которые определили в том же файле</h3>
    <p class="para">
     Следующие комбинации скриптов допустимы:
     <div class="informalexample">
      <p class="simpara">file1.php</p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">my\stuff</span><span style="color: #007700">;<br /><br />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{}</span></span></code></div>
      </div>

      <p class="simpara">another.php</p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">another</span><span style="color: #007700">;<br /><br />class </span><span style="color: #0000BB">thing </span><span style="color: #007700">{}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <p class="simpara">file2.php</p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">my\stuff</span><span style="color: #007700">;<br /><br />include </span><span style="color: #DD0000">'file1.php'</span><span style="color: #007700">;<br />include </span><span style="color: #DD0000">'another.php'</span><span style="color: #007700">;<br /><br />use </span><span style="color: #0000BB">another\thing </span><span style="color: #007700">as </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">; </span><span style="color: #FF8000">// Создаёт экземпляр класса thing из пространства имён another</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    Конфликт имён отсутствует, даже несмотря на то что класс <code class="literal">MyClass</code> существует
    внутри пространства имён <code class="literal">my\stuff</code>, потому что определение MyClass
    находится в отдельном файле. Однако следующий пример приводит к фатальной ошибке с конфликтом
    имён, потому что класс MyClass определён в том же файле, в котором указано ключевое слово use.
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">my\stuff</span><span style="color: #007700">;<br /><br />use </span><span style="color: #0000BB">another\thing </span><span style="color: #007700">as </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">;<br /><br />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{} </span><span style="color: #FF8000">// Фатальная ошибка: MyClass конфликтует с выражением импорта<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">();</span></span></code></div>
     </div>

    </div>
   </p>
   </div>
   <div class="sect2" id="language.namespaces.faq.nested">
    <h3 class="title">Вложенные пространства имён недопустимы.</h3>
    <p class="para">
     PHP не разрешает вложение пространств имён
     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">my\stuff </span><span style="color: #007700">{<br />    namespace </span><span style="color: #0000BB">nested </span><span style="color: #007700">{<br />        class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{}<br />    }<br />}</span></span></code></div>
      </div>

     </div>
     Однако сымитировать вложенные пространства имён можно так:
     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">my\stuff\nested </span><span style="color: #007700">{<br />    class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{}<br />}</span></span></code></div>
     </div>

    </div>
   </p>
   </div>
   <div class="sect2" id="language.namespaces.faq.quote">
    <h3 class="title">
     Динамические имена пространств имён (идентификаторы, взятые в кавычки)
     должны экранировать символ обратного слеша.
    </h3>
    <p class="para">
     Важно понимать это, потому что обратный слеш внутри строк работает как экранирующий символ.
     Он должен быть продублирован, когда указан внутри строки, иначе
     появляется риск неумышленных последствий:
     <div class="example" id="example-9">
      <p><strong>Пример #9 
       Подводные камни при указании имени пространства имён
       внутри строки с двойными кавычками
      </strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$a </span><span style="color: #007700">= </span><span style="color: #DD0000">"dangerous\name"</span><span style="color: #007700">; </span><span style="color: #FF8000">// Символ \n — переход на новую строку внутри строки с двойными кавычками!<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #DD0000">'not\at\all\dangerous'</span><span style="color: #007700">; </span><span style="color: #FF8000">// А тут нет проблем.<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">$a</span><span style="color: #007700">();</span></span></code></div>
      </div>

     </div>
     Внутри строк, заключённых в одинарные кавычки, обратный слеш в качестве разделителя более безопасен, но
     по-прежнему лучше рекомендуемая практика экранирования обратного слеша во всех строках.
    </p>
   </div>
   <div class="sect2" id="language.namespaces.faq.constants">
    <h3 class="title">Ссылаться на неопределённые константы, используя обратный слеш, нельзя. Выводится фатальная ошибка</h3>
    <p class="para">
     Любая неопределённая константа — неполное имя наподобие <code class="literal">FOO</code> — будет
     приводить к выводу сообщения о том, что PHP предположил, что <code class="literal">FOO</code> было значением
     константы. Любая константа, с полным или абсолютным именем, которая содержит
     символ обратного слеша, будет приводить к фатальной ошибке, если не будет найдена.
     <div class="example" id="example-10">
      <p><strong>Пример #10 Неопределённые константы</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">bar</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// Выводит предупреждение: undefined constants "FOO" assumed "FOO";<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// Фатальная ошибка: undefined namespace constant FOO<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">Bar\FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// Фатальная ошибка: undefined namespace constant bar\Bar\FOO<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\Bar\FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// Фатальная ошибка: undefined namespace constant Bar\FOO</span></span></code></div>
      </div>

     </div>
    </p>
   </div>
   <div class="sect2" id="language.namespaces.faq.builtinconst">
    <h3 class="title">Невозможно переопределить специальные константы <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> или <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></h3>
    <p class="para">
     Любая попытка определить константу пространства имён,
     которая совпадает с названиями специальных встроенных констант,
     приведёт к фатальной ошибке.
     <div class="example" id="example-11">
      <p><strong>Пример #11 Неопределённые константы</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">bar</span><span style="color: #007700">;<br /><br />const </span><span style="color: #0000BB">NULL </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #FF8000">// Фатальная ошибка;<br /></span><span style="color: #007700">const </span><span style="color: #0000BB">true </span><span style="color: #007700">= </span><span style="color: #DD0000">'stupid'</span><span style="color: #007700">; </span><span style="color: #FF8000">// Тоже фатальная ошибка;<br />// и т. д.</span></span></code></div>
      </div>

     </div>
    </p>
   </div>
 </div><?php manual_footer($setup); ?>