<?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.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' => '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.rationale" class="sect1">
  <h2 class="title">名前空間の概要</h2>
  
  <p class="verinfo">(PHP 5 &gt;= 5.3.0, PHP 7, PHP 8)</p>
  <p class="simpara">
   名前空間とは何でしょう? 広義の「名前空間」とは、項目をカプセル化するもののことです。
   これは多くの場面で見られる抽象概念です。
   たとえば、たいていの OS はディレクトリでファイルをグループ化します。
   この場合、ディレクトリがその中のファイルの名前空間として機能しています。
   具体的に言うと、<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">
      最初の問題を解決するためには、Extra_Long_Names のような長い名前をつけなければならない
     </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 /><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); ?>