<?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.rationale.php',
    1 => '命名空间概述',
    2 => '命名空间概述',
  ),
  'up' => 
  array (
    0 => 'language.namespaces.php',
    1 => '概述',
  ),
  'prev' => 
  array (
    0 => 'language.namespaces.php',
    1 => '概述',
  ),
  'next' => 
  array (
    0 => 'language.namespaces.definition.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.rationale" class="sect1">
  <h2 class="title">命名空间概述</h2>
  <p class="verinfo">(PHP 5 &gt;= 5.3.0, PHP 7, PHP 8)</p>
  <p class="simpara">
   什么是命名空间？从广义上来说，命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如，在操作系统中目录用来将相关文件分组，对于目录中的文件来说，它就扮演了命名空间的角色。具体举个例子，文件
   <code class="literal">foo.txt</code> 可以同时在目录 <code class="literal">/home/greg</code> 和
   <code class="literal">/home/other</code> 中存在，但在同一个目录中不能存在两个
   <code class="literal">foo.txt</code> 文件。另外，在目录 <code class="literal">/home/greg</code> 外访问
   <code class="literal">foo.txt</code> 文件时，我们必须将目录名以及目录分隔符放在文件名之前得到
   <code class="literal">/home/greg/foo.txt</code>。这个原理应用到程序设计领域就是命名空间的概念。
  </p>
  <p class="simpara">
   在 PHP 中，命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题：
  </p>
  <p class="para">
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名（或简短）的名称，提高源代码的可读性。
     </span>
    </li>
   </ol>
  </p>
  <p class="simpara">
   PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径。下面是一个说明 PHP
   命名空间语法的示例：
  </p>
  <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 /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">my\name</span><span style="color: #007700">; </span><span style="color: #FF8000">// 参考 "定义命名空间" 小节<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{}<br />function </span><span style="color: #0000BB">myfunction</span><span style="color: #007700">() {}<br />const </span><span style="color: #0000BB">MYCONST </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><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">$c </span><span style="color: #007700">= new </span><span style="color: #0000BB">\my\name\MyClass</span><span style="color: #007700">; </span><span style="color: #FF8000">// 参考 "全局空间" 小节<br /><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">// 参考 "使用命名空间：后备全局函数/常量" 小节<br /><br /></span><span style="color: #0000BB">$d </span><span style="color: #007700">= </span><span style="color: #0000BB">namespace\MYCONST</span><span style="color: #007700">; </span><span style="color: #FF8000">// 参考 "namespace操作符和__NAMESPACE__常量” 小节<br /><br /></span><span style="color: #0000BB">$d </span><span style="color: #007700">= </span><span style="color: #0000BB">__NAMESPACE__ </span><span style="color: #007700">. </span><span style="color: #DD0000">'\MYCONST'</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">constant</span><span style="color: #007700">(</span><span style="color: #0000BB">$d</span><span style="color: #007700">); </span><span style="color: #FF8000">// 参考 "命名空间和动态语言特征" 小节<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <span class="simpara">
    命名空间名称大小写不敏感。
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    名为 <code class="literal">PHP</code> 的命名空间，以及以这些名字开头的命名空间
    （例如 <code class="literal">PHP\Classes</code>）被保留用作语言内核使用，
    而不应该在用户空间的代码中使用。
   </p>
  </p></blockquote>
 </div><?php manual_footer($setup); ?>