<?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 => 'zh',
  ),
  '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' => 'zh',
    '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">不允许嵌套 namespace。
      </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">引用一个未定义的、带反斜线的常量，会导致 fatal 错误并退出</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> or <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 />$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 />$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 /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<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">// 扩展内置或全局的 class<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">{}<br /></span><span style="color: #0000BB">?&gt;</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 /></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">// 以当前命名空间中的 class 作为参数的类型<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 /></span><span style="color: #FF8000">// 以当前命名空间中的 class 作为参数的类型的另一种方式<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">;<br /></span><span style="color: #0000BB">?&gt;</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 /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<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">// class "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"<br /></span><span style="color: #0000BB">?&gt;</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> 部分。
   </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 /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<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">// class "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">// 调用 class "blah\blah\bar" 的静态方法 "name"<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"<br /></span><span style="color: #0000BB">?&gt;</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>，就会应用导入别名。
   </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 /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<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">// class "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">// 调用 class "blah\blah" 的静态方法 "name"<br /></span><span style="color: #0000BB">?&gt;</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 /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<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 />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">);<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">// 由于 "foo\strlen" 不存在，所以调用全局的 "strlen"<br /></span><span style="color: #0000BB">$arr </span><span style="color: #007700">= array(</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 /></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" 的值<br /></span><span style="color: #0000BB">?&gt;</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 /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">my\stuff</span><span style="color: #007700">;<br />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{}<br /></span><span style="color: #0000BB">?&gt;</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 /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">another</span><span style="color: #007700">;<br />class </span><span style="color: #0000BB">thing </span><span style="color: #007700">{}<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 /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">my\stuff</span><span style="color: #007700">;<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">//  class "thing" 的实例来自于命名空间 another<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    尽管在 <code class="literal">my\stuff</code> 命名空间中存在 <code class="literal">MyClass</code>，
    因为类定义在了独立的文件中，所以不会发生名称冲突。
    不过，接下来的例子中，因为 MyClass 定义在了 use 语句的同一个文件中，
    所以发生了名称冲突，导致了 fatal 错误。
    <div class="informalexample">
     <div class="example-contents">
     <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">my\stuff</span><span style="color: #007700">;<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 />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{} </span><span style="color: #FF8000">// fatal error: MyClass conflicts with import statement<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.nested">
   <h3 class="title">不允许嵌套 namespace</h3>
   <p class="para">
    PHP 不允许嵌套 namespace
    <div class="informalexample">
     <div class="example-contents">
     <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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 />}<br /></span><span style="color: #0000BB">?&gt;</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 /></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 />}<br /></span><span style="color: #0000BB">?&gt;</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 />$a </span><span style="color: #007700">= new </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">= new </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">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    在单引号字符串中，使用反斜线是安全的。
    但在最佳实践中，我们仍然推荐为所有字符串统一转义反斜线。
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.constants">
   <h3 class="title">引用一个未定义的、带反斜线的常量，会导致 fatal 错误并退出</h3>
   <p class="para">
    像 <code class="literal">FOO</code> 这样的非限定名称常量，如果使用的时候还没定义，
    会产生一个 notice。PHP 会假设该常量的值是 <code class="literal">FOO</code>。
    如果没有找到包含反斜线的常量，无论是完全或者不完全限定的名称，都会产生 fatal 错误。
    <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 /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">bar</span><span style="color: #007700">;<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">// 产生 notice - 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">// fatal error, 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">// fatal error, 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">// fatal error, undefined namespace constant Bar\FOO<br /></span><span style="color: #0000BB">?&gt;</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> or <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></h3>
   <p class="para">
    在命名空间内定义特殊的内置常量，会导致 fatal 错误
    <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 /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">bar</span><span style="color: #007700">;<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">// fatal error;<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">// 也是 fatal error;<br />// etc.<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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