<?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 => 'ja',
  ),
  '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 => '列挙型(Enum)',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    '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">
   この FAQ は 2 つに別れています。一般的な質問と、
   深く理解するために有用な実装に関する質問です。
  </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 />$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">\stdClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</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">;<br /></span><span style="color: #0000BB">?&gt;</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">// 内部クラス/グローバルクラスの継承<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">// 現在の名前空間のクラスをパラメータの型として使う<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">// 現在の名前空間のクラスをパラメータの型として使うもうひとつの方法<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">// "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> のような名前は 2 通りの方法で解釈されます。
   </p>
   <p class="para">
    別の名前に <code class="literal">my</code> というエイリアスを指定する import
    文がある場合は、そのエイリアスが <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">// "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">// "blah\blah\bar" のstaticメソッド "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> のようなクラス名は
    2 通りの方法で解釈されます。
   </p>
   <p class="para">
    別の名前に <code class="literal">name</code> というエイリアスを指定する import
    文がある場合は、そのエイリアスが適用されます。
   </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">// "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">// "blah\blah" クラスのstaticメソッド "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> のような関数名/定数名は
    2 通りの方法で解釈されます。
   </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">); </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">// "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">// calls function "foo\foo" - import is not applied<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">// sets $a to value of constant "foo\FOO" - import is not applied<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">// sets $b to value of global constant "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">// 名前空間 another のクラス "thing" のインスタンスを作成します。<br /></span><span style="color: #0000BB">?&gt;</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 /></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">名前空間のネストはできない</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 /></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">= </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">;<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">バックスラッシュを含む未定義な定数を参照すると、致命的なエラーが発生する</h3>
   <p class="para">
    未定義の定数のうち <code class="literal">FOO</code> のような修飾されていないものは、
    PHP が <code class="literal">FOO</code> を定数の値と解釈したという notice が発生します。
    修飾あるいは完全修飾形式の定数、つまりバックスラッシュを含む定数の場合、
    それが未定義なら致命的なエラーが発生します。
    <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>, <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 /></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">// 致命的なエラー<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 />// etc.<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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