<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.types.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'language.types.string.php',
    1 => '文字列',
    2 => '文字列',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => '型',
  ),
  'prev' => 
  array (
    0 => 'language.types.float.php',
    1 => '浮動小数点数',
  ),
  'next' => 
  array (
    0 => 'language.types.numeric-strings.php',
    1 => '数値形式の文字列',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'language/types/string.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.types.string" class="sect1">
 <h2 class="title">文字列</h2>

 <p class="para">
  <span class="type"><a href="language.types.string.php" class="type string">string</a></span> は、文字が連結されたものです。PHP では、
  文字は 1 バイトと同じです。つまり、256 個の異なる文字を使用可能です。
  これは、PHP が Unicode をネイティブにサポートしていないことも意味します。
  <a href="language.types.string.php#language.types.string.details" class="link">文字列型の詳細</a>を参照ください。
 </p>

 <blockquote class="note"><p><strong class="note">注意</strong>: 
  <span class="simpara">
   32bit ビルドでは、
   文字列の最大長は 2GB (2147483647 バイト) です。
  </span>
 </p></blockquote>

 <div class="sect2" id="language.types.string.syntax">
  <h3 class="title">構文</h3>

  <p class="para">
   文字列リテラルは、4 つの異なる方法で指定することが可能です。
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.single" class="link">引用符</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.double" class="link">二重引用符</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.heredoc" class="link">ヒアドキュメント構文</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.nowdoc" class="link">Nowdoc 構文</a>
    </span>
   </li>
  </ul>

  <div class="sect3" id="language.types.string.syntax.single">
   <h4 class="title">引用符</h4>

   <p class="para">
    文字列を指定する最も簡単な方法は、引用符 (文字
    <code class="literal">&#039;</code>) で括ることです。
   </p>

   <p class="para">
    引用符をリテラルとして指定するには、バックスラッシュ
    (<code class="literal">\</code>) でエスケープする必要があります。
    バックスラッシュをリテラルとして指定するには、二重
    (<code class="literal">\\</code>) にします。
    それ以外の場面で登場するバックスラッシュは、すべてバックスラッシュそのものとして扱われます。
    つまり、<code class="literal">\r</code> や <code class="literal">\n</code>
    といったおなじみのエスケープシーケンスを書いても特別な効果は得られず、
    書いたままの形式で出力されます。
   </p>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     <a href="language.types.string.php#language.types.string.syntax.double" class="link">ダブルクォート</a> 構文や
     <a href="language.types.string.php#language.types.string.syntax.heredoc" class="link">ヒアドキュメント構文</a> とは異なり、
     <a href="language.variables.php" class="link">変数</a>と特殊文字のエスケープシーケンスは、
     引用符 (シングルクオート) で括られた文字列にある場合には展開<em>されません</em>。
    </span>
   </p></blockquote>

   <div class="example" id="example-1">
    <p><strong>例1 Syntax Variants</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'this is a simple string'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">'You can also have embedded newlines in<br />strings this way as it is<br />okay to do'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 出力: Arnold once said: "I'll be back"<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Arnold once said: "I\'ll be back"'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 出力: You deleted C:\*.*?<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'You deleted C:\\*.*?'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 出力: You deleted C:\*.*?<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'You deleted C:\*.*?'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 出力: This will not expand: \n a newline<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'This will not expand: \n a newline'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 出力: Variables do not $expand $either<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Variables do not $expand $either'</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  </div>

  <div class="sect3" id="language.types.string.syntax.double">
   <h4 class="title">二重引用符</h4>

   <p class="para">
    文字列が二重引用符 (<code class="literal">&quot;</code>) で括られた場合、
    PHP は、以下のエスケープシーケンスを特殊な文字として解釈します。
   </p>

   <table class="doctable table">
    <caption><strong>エスケープされた文字</strong></caption>

    
     <thead>
      <tr>
       <th>記述</th>
       <th>意味</th>
      </tr>

     </thead>


     <tbody class="tbody">
      <tr>
       <td><code class="literal">\n</code></td>
       <td>ラインフィード (LF またはアスキーの 0x0A (10))</td>
      </tr>

      <tr>
       <td><code class="literal">\r</code></td>
       <td>キャリッジリターン (CR またはアスキーの 0x0D (13))</td>
      </tr>

      <tr>
       <td><code class="literal">\t</code></td>
       <td>水平タブ (HT またはアスキーの 0x09 (9))</td>
      </tr>

      <tr>
       <td><code class="literal">\v</code></td>
       <td>垂直タブ (VT またはアスキーの 0x0B (11))</td>
      </tr>

      <tr>
       <td><code class="literal">\e</code></td>
       <td>エスケープ (ESC あるいはアスキーの 0x1B (27))</td>
      </tr>

      <tr>
       <td><code class="literal">\f</code></td>
       <td>フォームフィード (FF またはアスキーの 0x0C (12))</td>
      </tr>

      <tr>
       <td><code class="literal">\\</code></td>
       <td>バックスラッシュ</td>
      </tr>

      <tr>
       <td><code class="literal">\$</code></td>
       <td>ドル記号</td>
      </tr>

      <tr>
       <td><code class="literal">\&quot;</code></td>
       <td>二重引用符</td>
      </tr>

      <tr>
       <td><code class="literal">\[0-7]{1,3}</code></td>
       <td>
        8進数: 正規表現 <code class="literal">[0-7]{1,3}</code> にマッチする文字シーケンスは、8 進数表記の 1 文字 (例:. <code class="literal">&quot;\101&quot; === &quot;A&quot;</code>) です。
        正規表現にマッチする文字シーケンスは、8 進数表記の 1 文字です。
        1 バイトに収まらない部分は、何もメッセージを出さずにオーバーフローします
        (例: <code class="literal">&quot;\400&quot; === &quot;\000&quot;</code>) 。
       </td>
      </tr>

      <tr>
       <td><code class="literal">\x[0-9A-Fa-f]{1,2}</code></td>
       <td>
        16進数: 正規表現 <code class="literal">[0-9A-Fa-f]{1,2}</code> にマッチする文字シーケンスは、16 進数表記の 1 文字(例: <code class="literal">&quot;\x41&quot; === &quot;A&quot;</code>)です。
       </td>
      </tr>

      <tr>
       <td><code class="literal">\u{[0-9A-Fa-f]+}</code></td>
       <td>
        Unicode: 正規表現 <code class="literal">[0-9A-Fa-f]+</code> にマッチする文字シーケンスは、Unicode のコードポイントです。
        そのコードポイントの UTF-8 表現を文字列として出力します。
        シーケンスを波括弧で囲む必要があります。例 <code class="literal">&quot;\u{41}&quot; === &quot;A&quot;</code>
       </td>
      </tr>

     </tbody>
    
   </table>


   <p class="para">
    繰り返しますが、この他の文字をエスケープしようとした場合には、
    バックスラッシュも出力されます!
   </p>

   <p class="para">
    しかし、二重引用符で括られた文字列で最も重要なのは、
    変数名が展開されるところです。詳細は、<a href="language.types.string.php#language.types.string.parsing" class="link">文字列の補間</a>を参照ください。
   </p>
  </div>
  
  <div class="sect3" id="language.types.string.syntax.heredoc">
   <h4 class="title">ヒアドキュメント</h4>

   <p class="simpara">
    文字列を区切る別の方法としてヒアドキュメント構文 (&quot;&lt;&lt;&lt;&quot;)
    があります。この場合、ある ID (と、それに続けて改行文字)
    を <code class="literal">&lt;&lt;&lt;</code>
    の後に指定し、文字列を置いた後で、
    同じ ID (終端ID) を括りを閉じるために置きます。
   </p>

   <p class="simpara">
    終端ID は、スペースまたはタブでインデントできます。
    その場合、インデントされた部分は文字列の全ての行から取り除かれます。
    PHP 7.3.0 より前のバージョンでは、
    終端ID はその行の最初のカラムから始めなければ
    <em>いけませんでした</em>。
   </p>

   <p class="simpara">
    また、終端ID は、PHP の他のラベルと同様の命名規則に従う必要があります。
    つまり、英数字およびアンダースコアのみを含み、
    数字でない文字またはアンダースコアで始まる必要があります。
   </p>

   <div class="example" id="example-2">
    <p><strong>例2 PHP 7.3.0 以降での、基本的なヒアドキュメントの使い方</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// 終端IDをインデントしない場合<br /></span><span style="color: #007700">echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">      a<br />     b<br />    c<br />\n<br /></span><span style="color: #007700">END;<br /></span><span style="color: #FF8000">// 終端IDを4つのスペースでインデントする場合<br /></span><span style="color: #007700">echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">      a<br />     b<br />    c<br /></span><span style="color: #007700">    END;</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の PHP 7.3 での出力は、このようになります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
      a
     b
    c
  a
 b
c
</pre></div>
    </div>
   </div>

   <p class="simpara">
    終端ID が、文字列のいずれかの行より奥にインデントされている場合、
    <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> がスローされます。
   </p>

   <div class="example" id="example-3">
    <p><strong>例3 終端ID は 文字列本体よりも奥にインデントしてはいけない</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">  a<br /> b<br />c<br /></span><span style="color: #007700">   END;</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の PHP 7.3 での出力は、このようになります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Parse error: Invalid body indentation level (expecting an indentation level of at least 3) in example.php on line 4
</pre></div>
    </div>
   </div>

   <p class="simpara">
    終端ID をインデントする場合、
    インデントに使う文字として、タブまたはスペースが使えます。
    しかし、終端ID、および (終端ID までの)文字列の本体どちらであっても、
    インデントする際にタブとスペースを混ぜては
    <em>いけません</em>。
    混ぜた場合、
    <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> がスローされます。

    インデントに使う文字に制限があるのは、
    タブとスペースを混ぜてしまうと可読性が損なわれるためです。
   </p>

   <div class="example" id="example-4">
    <p><strong>例4 文字列本体 や 終端ID のインデントに違う文字を使う</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// 以下のコードはいずれも動作しません。<br />// 文字列本体(スペース) と 終端ID(タブ) とで、異なる文字でインデントする<br /></span><span style="color: #007700">{<br />    echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">     a<br /></span><span style="color: #007700">        END;<br />}<br /></span><span style="color: #FF8000">// 文字列本体に、タブとスペースを混ぜてインデントする<br /></span><span style="color: #007700">{<br />    echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">        a<br /></span><span style="color: #007700">     END;<br />}<br /></span><span style="color: #FF8000">// 終端IDのインデントに、スペースとタブを混ぜる<br /></span><span style="color: #007700">{<br />    echo &lt;&lt;&lt;END<br /></span><span style="color: #DD0000">          a<br /></span><span style="color: #007700">         END;<br />}</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の PHP 7.3 での出力は、このようになります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Parse error: Invalid indentation - tabs and spaces cannot be mixed in example.php line 8
</pre></div>
    </div>
   </div>

   <p class="simpara">
    文字列本体の後に置かれる 終端ID の後に、
    セミコロンや改行を続ける必要はありません。
    たとえば、次のようなコードが PHP 7.3.0 以降で動作します:
   </p>

   <div class="example" id="example-5">
    <p><strong>例5 終端ID の後に式を継続する</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$values </span><span style="color: #007700">= [&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">a<br />  b<br />    c<br /></span><span style="color: #007700">END, </span><span style="color: #DD0000">'d e f'</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$values</span><span style="color: #007700">);</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の PHP 7.3 での出力は、このようになります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
array(2) {
  [0] =&gt;
  string(11) &quot;a
  b
    c&quot;
  [1] =&gt;
  string(5) &quot;d e f&quot;
}
</pre></div>
    </div>
   </div>

   <div class="warning"><strong class="warning">警告</strong>
    <p class="simpara">
     終端ID が行のはじめに見つかった場合、
     それが別の単語の一部かどうかにかかわらず、
     それが終端IDと見なされ、
     <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> が起きる可能性があります。
    </p>

    <div class="example" id="example-6">
     <p><strong>例6 文字列本体に 終端ID が含まれると、ParseError が起きがち</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$values </span><span style="color: #007700">= [&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">a<br />b<br /></span><span style="color: #007700">END </span><span style="color: #0000BB">ING<br />END</span><span style="color: #007700">, </span><span style="color: #DD0000">'d e f'</span><span style="color: #007700">];</span></span></code></div>
     </div>

     <div class="example-contents"><p>上の例の PHP 7.3 での出力は、このようになります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Parse error: syntax error, unexpected identifier &quot;ING&quot;, expecting &quot;]&quot; in example.php on line 5
</pre></div>
     </div>
    </div>

    <p class="simpara">
     この問題を避けるために、
     次のようなシンプルなルールに従っておくと安全です:
     <em>
     文字列本体に出現するテキストを、終端ID として採用しない
     </em>
    </p>

   </div>

   <div class="warning"><strong class="warning">警告</strong>
    <p class="simpara">
     PHP 7.3.0 より前のバージョンで注意すべき非常に重要な点は、
     終端ID がある行には、セミコロン
     (<code class="literal">;</code>)
     以外の他の文字が含まれていてはいけなかったことです。
     これは、特に ID はインデントしてはならないということ、
     セミコロンの前に空白やタブを付けてはいけないことを意味していました。
     終端ID の前の最初の文字は、使用するオペレーティングシステムで定義された
     改行である必要があることにも注意を要します。
     これは、UNIX システムでは macOS を含め <code class="literal">\n</code> となります。
     最後の区切り文字の後にもまた、改行を入れる必要があります。
    </p>

    <p class="simpara">
     この規則が破られて 終端ID が &quot;clean&quot; でない場合、
     終端ID と認識されず、PHP はさらに終端 ID を探し続けます。
     適当な 終端ID がみつからない場合、
     スクリプトの最終行でパースエラーが発生します。
    </p>

    <div class="example" id="example-7">
     <p><strong>例7 PHP 7.3.0 より前のバージョンでの間違った例</strong></p>
     <div class="example-contents">
      
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">    EOT;<br />}<br /></span><span style="color: #FF8000">// 識別子はインデントしてはいけません<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    <div class="example" id="example-8">
     <p><strong>例8 PHP 7.3.0 より前のバージョンでも有効な例</strong></p>
     <div class="example-contents">
      
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">EOT;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>

    <p class="para">
     変数を含んでいるヒアドキュメントは、クラスのプロパティの初期化に用いることはできません。
    </p>

   </div>

   <p class="para">
    ヒアドキュメントは二重引用符を使用しませんが、
    二重引用符で括られた文字列と全く同様に動作します。
    これはつまり、引用符をエスケープする必要はないが、
    上記のリストにあるエスケープされたコードは同様に使用できるということです。
    変数は展開されますが、文字列の場合と同様に
    ヒアドキュメントの内部で複雑な変数を表わす場合には注意が必要です。
   </p>

   <div class="example" id="example-9"> 
    <p><strong>例9 ヒアドキュメントで文字列を括る例</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$str </span><span style="color: #007700">= &lt;&lt;&lt;EOD<br /></span><span style="color: #DD0000">Example of string<br />spanning multiple lines<br />using heredoc syntax.<br /></span><span style="color: #007700">EOD;<br /><br /></span><span style="color: #FF8000">/* 変数を使用するより複雑な例 */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    var </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br />    var </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br /><br />    function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'Foo'</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'Bar1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar2'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar3'</span><span style="color: #007700">);<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #DD0000">'MyName'</span><span style="color: #007700">;<br /><br />echo &lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">My name is "</span><span style="color: #0000BB">$name</span><span style="color: #DD0000">". I am printing some </span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo</span><span style="color: #DD0000">.<br />Now, I am printing some </span><span style="color: #007700">{</span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]}</span><span style="color: #DD0000">.<br />This should print a capital 'A': \x41<br /></span><span style="color: #007700">EOT;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
My name is &quot;MyName&quot;. I am printing some Foo.
Now, I am printing some Bar2.
This should print a capital &#039;A&#039;: A</pre></div>
    </div>
   </div>

   <p class="para">
    ヒアドキュメント構文を用いて、
    関数の引数にデータを渡すこともできます。
   </p>

   <div class="example" id="example-10"> 
    <p><strong>例10 ヒアドキュメントを引数に使用する例</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(array(&lt;&lt;&lt;EOD<br /></span><span style="color: #DD0000">foobar!<br /></span><span style="color: #007700">EOD<br />));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    static変数やクラスのプロパティ/定数は、
    ヒアドキュメント構文で初期化することができます。
   </p>

   <div class="example" id="example-11"> 
    <p><strong>例11 ヒアドキュメントを用いた静的な値の初期化</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// static 変数<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />{<br />    static </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;LABEL<br /></span><span style="color: #DD0000">Nothing in here...<br /></span><span style="color: #007700">LABEL;<br />}<br /><br /></span><span style="color: #FF8000">// クラスのプロパティ/定数<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    const </span><span style="color: #0000BB">BAR </span><span style="color: #007700">= &lt;&lt;&lt;FOOBAR<br /></span><span style="color: #DD0000">Constant example<br /></span><span style="color: #007700">FOOBAR;<br /><br />    public </span><span style="color: #0000BB">$baz </span><span style="color: #007700">= &lt;&lt;&lt;FOOBAR<br /></span><span style="color: #DD0000">Property example<br /></span><span style="color: #007700">FOOBAR;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    ヒアドキュメントの宣言をダブルクォートで囲むこともできます。
   </p>

   <div class="example" id="example-12"> 
    <p><strong>例12 ヒアドキュメントでのダブルクォート</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;"FOOBAR"<br /></span><span style="color: #DD0000">Hello World!<br /></span><span style="color: #007700">FOOBAR;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  </div>
  
  <div class="sect3" id="language.types.string.syntax.nowdoc">
   <h4 class="title">Nowdoc</h4>
   
   <p class="para">
    Nowdoc はヒアドキュメントと似ていますが、
    ヒアドキュメントがダブルクォートで囲んだ文字列として扱われるのに対して、
    Nowdoc はシングルクォートで囲んだ文字列として扱われます。
    Nowdoc の使用方法はヒアドキュメントとほぼ同じですが、
    その中身について <em>文字列の補間処理を行いません</em>。
    PHP のコードや大量のテキストを埋め込む際に、
    エスケープが不要になるので便利です。この機能は、SGML の
    <code class="literal">&lt;![CDATA[ ]]&gt;</code>
    (ブロック内のテキストをパースしないことを宣言する)
    と同じようなものです。
   </p>
   
   <p class="para">
    Nowdoc の書き方は、ヒアドキュメントと同じように
    <code class="literal">&lt;&lt;&lt;</code> を使用します。
    しかし、その後に続く識別子をシングルクォートで囲んで
    <code class="literal">&lt;&lt;&lt;&#039;EOT&#039;</code> のようにします。
    ヒアドキュメントの識別子に関する決まりがすべて Nowdoc
    の識別子にも当てはまります。特に 終端ID の書き方に関する決まりに注意しましょう。
   </p>
   
   <div class="example" id="example-13">
    <p><strong>例13 Nowdoc による文字列のクォートの例</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo &lt;&lt;&lt;'EOD'<br /></span><span style="color: #DD0000">Example of string spanning multiple lines<br />using nowdoc syntax. Backslashes are always treated literally,<br />e.g. \\ and \'.<br /></span><span style="color: #007700">EOD;</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Example of string spanning multiple lines
using nowdoc syntax. Backslashes are always treated literally,
e.g. \\ and \&#039;.
</pre></div>
    </div>
   </div>

   <div class="example" id="example-14">
    <p><strong>例14 変数がある場合の、Nowdoc による文字列のクォートの例</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/* 変数を使った、より複雑な例 */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br /><br />    function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'Foo'</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'Bar1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar2'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bar3'</span><span style="color: #007700">);<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #DD0000">'MyName'</span><span style="color: #007700">;<br /><br />echo &lt;&lt;&lt;'EOT'<br /></span><span style="color: #DD0000">My name is "$name". I am printing some $foo-&gt;foo.<br />Now, I am printing some {$foo-&gt;bar[1]}.<br />This should not print a capital 'A': \x41<br /></span><span style="color: #007700">EOT;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
My name is &quot;$name&quot;. I am printing some $foo-&gt;foo.
Now, I am printing some {$foo-&gt;bar[1]}.
This should not print a capital &#039;A&#039;: \x41</pre></div>
    </div>
   </div>
   
   <div class="example" id="example-15">
    <p><strong>例15 静的なデータの例</strong></p>
    <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &lt;&lt;&lt;'EOT'<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">EOT;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  </div>

  <div class="sect3" id="language.types.string.parsing">
   <h4 class="title">文字列の補間処理</h4>

   <p class="simpara">
    文字列が二重引用符で括られるかヒアドキュメントで指定された場合、
    その中の<a href="language.variables.php" class="link">変数</a>は置き換えられます。
   </p>

   <p class="simpara">
    構文の型には、<a href="language.types.string.php#language.types.string.parsing.basic" class="link">単純な</a>構文と
    <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">高度な
    </a>構文の 2 種類があります。単純な構文は、最も一般的で便利です。
    この構文では、変数や配列の値、オブジェクトのプロパティを、
    簡単に文字列に埋め込むことができます。
   </p>

   <div class="sect4" id="language.types.string.parsing.basic">
    <h5 class="title">単純な構文</h5>
    <p class="simpara">
     ドル記号 (<code class="literal">$</code>) を見付けると、
     その後に変数名で使える文字は変数として解釈され、置き換えられます。
    </p>
    <div class="example" id="example-16">
     <p><strong>例16 文字列の置き換え</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$juice </span><span style="color: #007700">= </span><span style="color: #DD0000">"apple"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"He drank some </span><span style="color: #0000BB">$juice</span><span style="color: #DD0000"> juice." </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
He drank some apple juice.
</pre></div>
     </div>
    </div>

    <p class="simpara">
     形式的には、文字列の変数の置き換えの文法は下記のようになります:

    </p>
    <div class="informalexample">
     <div class="example-contents">
<div class="annotation-interactive cdata"><pre>
string-variable::
     variable-name   (offset-or-property)?
   | ${   expression   }

offset-or-property::
     offset-in-string
   | property-in-string

offset-in-string::
     [   name   ]
   | [   variable-name   ]
   | [   integer-literal   ]

property-in-string::
     -&gt;  name

variable-name::
     $   name

name::
     [a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*

</pre></div>
     </div>

    </div>

    <div class="warning"><strong class="warning">警告</strong>
     <p class="para">
      <code class="literal">${ expression }</code> の形式は、
      PHP 8.2.0 以降では推奨されなくなりました。
      なぜなら、これは
      <a href="language.variables.variable.php" class="link">可変変数</a>:
      として解釈される可能性があるからです。
      <div class="informalexample">
       <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">const </span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #DD0000">"</span><span style="color: #007700">${</span><span style="color: #0000BB">foo</span><span style="color: #007700">}</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #DD0000">"</span><span style="color: #007700">${(</span><span style="color: #0000BB">foo</span><span style="color: #007700">)}</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
       </div>

       <p class="para">上の例の PHP 8.2 での出力は、このようになります。:</p>
       <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in file on line 6

Deprecated: Using ${expr} (variable variables) in strings is deprecated, use {${expr}} instead in file on line 9
string(3) &quot;foo&quot;
string(3) &quot;bar&quot;
</pre></div>
       </div>
       <p class="para">上の例の出力は以下となります。</p>
       <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
string(3) &quot;foo&quot;
string(3) &quot;bar&quot;
</pre></div>
       </div>
      </div>
      <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">高度な</a>
      文字列補間の記法を代わりに使うべきです。
     </p>
    </div>

    <blockquote class="note"><p><strong class="note">注意</strong>: 
     <span class="simpara">
      有効な変数名にならない場合、ドル記号は文字列中でそのまま解釈されます:
     </span>
     <div class="informalexample">
      <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"No interpolation $  has happened\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"No interpolation $\n has happened\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"No interpolation $2 has happened\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <p class="para">上の例の出力は以下となります。</p>
      <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
No interpolation $  has happened
No interpolation $
 has happened
No interpolation $2 has happened
</pre></div>
      </div>
     </div>
    </p></blockquote>

    <div class="example" id="example-17">
     <p><strong>例17 配列の最初の次元やプロパティの値を補間させる</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$juices </span><span style="color: #007700">= array(</span><span style="color: #DD0000">"apple"</span><span style="color: #007700">, </span><span style="color: #DD0000">"orange"</span><span style="color: #007700">, </span><span style="color: #DD0000">"string_key" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">"purple"</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"He drank some </span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]</span><span style="color: #DD0000"> juice."</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"He drank some </span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]</span><span style="color: #DD0000"> juice."</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"He drank some </span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #0000BB">string_key</span><span style="color: #007700">]</span><span style="color: #DD0000"> juice."</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />class </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$s </span><span style="color: #007700">= </span><span style="color: #DD0000">"string"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">A</span><span style="color: #007700">();<br /><br />echo </span><span style="color: #DD0000">"Object value: </span><span style="color: #0000BB">$o</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">s</span><span style="color: #DD0000">."</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
He drank some apple juice.
He drank some orange juice.
He drank some purple juice.
Object value: string.
</pre></div>
     </div>
    </div>

    <blockquote class="note"><p><strong class="note">注意</strong>: 
     <span class="simpara">
      配列のキーについては、クォートを外さなければなりません。
      よって、単純な記法では定数をキーとして参照できません。
      <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">高度な</a>
      記法を使ってください。
     </span>
    </p></blockquote>

    <p class="simpara">
     PHP 7.1.0 以降では、<em>負の</em> 
     数値インデックスもサポートされています
    </p>

    <div class="example" id="example-18"><p><strong>例18 負の数値インデックス</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$string </span><span style="color: #007700">= </span><span style="color: #DD0000">'string'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"The character at index -2 is </span><span style="color: #0000BB">$string</span><span style="color: #007700">[-</span><span style="color: #0000BB">2</span><span style="color: #007700">]</span><span style="color: #DD0000">."</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$string</span><span style="color: #007700">[-</span><span style="color: #0000BB">3</span><span style="color: #007700">] = </span><span style="color: #DD0000">'o'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Changing the character at index -3 to o gives </span><span style="color: #0000BB">$string</span><span style="color: #DD0000">."</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
     <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
The character at index -2 is n.
Changing the character at index -3 to o gives strong.
</pre></div>
     </div>
    </div>

    <p class="simpara">
     さらに複雑な処理は、
     <a href="language.types.string.php#language.types.string.parsing.advanced" class="link">高度な</a>
     記法を使う必要があります。
    </p>
   </div>

   <div class="sect4" id="language.types.string.parsing.advanced">
    <h5 class="title">高度な (波括弧) 記法</h5>

    <p class="simpara">
     高度な波括弧を使った記法を使うと、
     任意のアクセス方法で <em>変数</em>
     の補間を行うことができます。
    </p>

    <p class="simpara">
     任意のスカラー変数や、配列の要素、オブジェクトのプロパティ
     (<span class="modifier">static</span> かそうでないかは問いません)
     の文字列表現を、この記法に含めることができます。
     式は文字列の外部に現れるものと同じやり方で書くことができ、
     <code class="literal">{</code> と <code class="literal">}</code> で囲みます。
     <code class="literal">{</code> はエスケープできないので、
     この記法は <code class="literal">{</code> のすぐ後に <code class="literal">$</code>
     が続く場合にのみ認識されます。
     <code class="literal">{$</code> を使いたい場合は
     <code class="literal">{\$</code> と書くようにしてください。
     以下の複数の例を見ると、わかりやすいでしょう:
    </p>

    <div class="example" id="example-19">
     <p><strong>例19 {} による記法</strong></p>
     <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">const </span><span style="color: #0000BB">DATA_KEY </span><span style="color: #007700">= </span><span style="color: #DD0000">'const-key'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$great </span><span style="color: #007700">= </span><span style="color: #DD0000">'fantastic'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$arr </span><span style="color: #007700">= [<br />    </span><span style="color: #DD0000">'1'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'2'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'3'</span><span style="color: #007700">,<br />    [</span><span style="color: #0000BB">41</span><span style="color: #007700">, </span><span style="color: #0000BB">42</span><span style="color: #007700">, </span><span style="color: #0000BB">43</span><span style="color: #007700">],<br />    </span><span style="color: #DD0000">'key' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Indexed value'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'const-key' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Key with minus sign'</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'foo' </span><span style="color: #007700">=&gt; [</span><span style="color: #DD0000">'foo1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'foo2'</span><span style="color: #007700">, </span><span style="color: #DD0000">'foo3'</span><span style="color: #007700">]<br />];<br /><br /></span><span style="color: #FF8000">// 動作しない。出力: This is { fantastic}<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"This is { </span><span style="color: #0000BB">$great</span><span style="color: #DD0000">}" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 動作する。出力: This is fantastic<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"This is </span><span style="color: #007700">{</span><span style="color: #0000BB">$great</span><span style="color: #007700">}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 波括弧を出力に含めるには:<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"This is {</span><span style="color: #007700">{</span><span style="color: #0000BB">$great</span><span style="color: #007700">}</span><span style="color: #DD0000">}" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />class </span><span style="color: #0000BB">Square </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$width</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">int $width</span><span style="color: #007700">) { </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">width </span><span style="color: #007700">= </span><span style="color: #0000BB">$width</span><span style="color: #007700">; }<br />}<br /><br /></span><span style="color: #0000BB">$square </span><span style="color: #007700">= new </span><span style="color: #0000BB">Square</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// 動作する<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"This square is </span><span style="color: #007700">{</span><span style="color: #0000BB">$square</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">width</span><span style="color: #007700">}</span><span style="color: #DD0000">00 centimeters wide." </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /><br /></span><span style="color: #FF8000">// 動作する。クォートされたキーは波括弧構文でのみ動作する<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"This works: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'key'</span><span style="color: #007700">]}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /><br /></span><span style="color: #FF8000">// 動作する<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"This works: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</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">]}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"This works: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">DATA_KEY</span><span style="color: #007700">]}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 多次元配列を使う場合、文字列内では常に配列を波括弧で囲む<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"This works: </span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">][</span><span style="color: #0000BB">2</span><span style="color: #007700">]}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"This works: </span><span style="color: #007700">{</span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">values</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">]-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"This works: </span><span style="color: #007700">{</span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$staticProp</span><span style="color: #007700">}</span><span style="color: #DD0000">" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 動作しない。出力: C:\directory\{fantastic}.txt<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"C:\directory\{</span><span style="color: #0000BB">$great</span><span style="color: #DD0000">}.txt" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 動作する。出力: C:\directory\fantastic.txt<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"C:\\directory\\</span><span style="color: #007700">{</span><span style="color: #0000BB">$great</span><span style="color: #007700">}</span><span style="color: #DD0000">.txt" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>

    <blockquote class="note"><p><strong class="note">注意</strong>: 
     <span class="simpara">
      この記法を使うと任意の式が使えるので、
      <a href="language.variables.variable.php" class="link">可変変数</a>
      を使うこともできます。
     </span>
    </p></blockquote>
   </div>
  </div>

  <div class="sect3" id="language.types.string.substr">
   <h4 class="title">文字列への文字単位のアクセスと修正</h4>

   <p class="para">
    <var class="varname">$str[42]</var> のように、
    角括弧を使用してゼロから始まるオフセットを指定すると、
    文字列内の任意の文字にアクセスし、修正することが可能です。
    つまり、文字列を文字の配列として考えるわけです。
    複数の文字を取り出したり変更したりしたいときは、関数
    <span class="function"><a href="function.substr.php" class="function">substr()</a></span> および <span class="function"><a href="function.substr-replace.php" class="function">substr_replace()</a></span>
    が使えます。
   </p>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     PHP 7.1.0 以降では、負の文字列オフセットにも対応するようになりました。
     これは、文字列の末尾からのオフセットを表します。
     以前のバージョンでは、負のオフセットで読み込もうとすると <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>
     が発生し (空文字列を返します)、負のオフセットで書き込もうとすると <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>
     が発生していました (文字列には何も手が加えられません)。
    </span>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     PHP 8.0.0 より前のバージョンでは、
     <var class="varname">$str{42}</var>
     のように波括弧を使用してアクセスすることもできました。
     この文法は PHP 7.4.0 以降は非推奨になり、
     PHP 8.0.0 以降はサポートされなくなっています。
    </span>
   </p></blockquote>

   <div class="warning"><strong class="warning">警告</strong>
    <p class="simpara">
     範囲外のオフセットに書き込んだ場合は、その地点まで空白文字で埋められます。
     整数型以外の型は整数型に変換されます。
     無効なオフセット形式を指定した場合は <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> を発行します。
     文字列を代入した場合は最初の文字だけを使用します。
     PHP 7.1.0 以降では、空の文字列を代入すると 致命的なエラーが発生するようになりました。
     これまでのバージョンでは、NULL バイトが代入されていました。
    </p>
   </div>

   <div class="warning"><strong class="warning">警告</strong>
    <p class="simpara">
     内部的には、PHP の文字列はバイト配列です。
     そのため、角括弧を使った配列形式での文字列へのアクセスは、
     マルチバイト対応ではありません。この方法は、
     ISO-8859-1 のようなシングルバイトエンコーディングの文字列に対してだけしか使えません。
    </p>
   </div>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     PHP 7.1.0 以降では、空の文字列に空のインデックス演算子を適用すると
     致命的なエラーが発生するようになりました。
     これまでのバージョンではエラーにならず、空の文字列が配列に変換されていました。
    </span>
   </p></blockquote>

   <div class="example" id="example-20">
    <p><strong>例20 文字列の例</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// 文字列の最初の文字を取得します<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'This is a test.'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$first </span><span style="color: #007700">= </span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$first</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// 文字列の 3 番目の文字を取得します<br /></span><span style="color: #0000BB">$third </span><span style="color: #007700">= </span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$third</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// 文字列の最後の文字を取得します<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'This is still a test.'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$last </span><span style="color: #007700">= </span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">)-</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$last</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// 文字列の最後の文字を変更します<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Look at the sea'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">)-</span><span style="color: #0000BB">1</span><span style="color: #007700">] = </span><span style="color: #DD0000">'e'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   
   <p class="para">
    文字列のオフセットは整数あるいは整数と見なせる文字列に限られます。
    それ以外の場合は警告が発生します。
   </p>

   <div class="example" id="example-21">
    <p><strong>例21 不正な文字列のオフセットの例</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'abc'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$keys </span><span style="color: #007700">= [ </span><span style="color: #DD0000">'1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'1.0'</span><span style="color: #007700">, </span><span style="color: #DD0000">'x'</span><span style="color: #007700">, </span><span style="color: #DD0000">'1x' </span><span style="color: #007700">];<br /><br />foreach (</span><span style="color: #0000BB">$keys </span><span style="color: #007700">as </span><span style="color: #0000BB">$keyToTry</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(isset(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">$keyToTry</span><span style="color: #007700">]));<br /><br />    try {<br />        </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">$keyToTry</span><span style="color: #007700">]);<br />    } catch (</span><span style="color: #0000BB">TypeError $e</span><span style="color: #007700">) {<br />        echo </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />    }<br /><br />    echo </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>上の例の出力は以下となります。</p></div>
    <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
bool(true)
string(1) &quot;b&quot;

bool(false)
Cannot access offset of type string on string

bool(false)
Cannot access offset of type string on string

bool(false)

Warning: Illegal string offset &quot;1x&quot; in Standard input code on line 10
string(1) &quot;b&quot;
</pre></div>
    </div>
   </div>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     その他の型の変数
     (配列や、適切なインターフェイスを実装したオブジェクトを除く)
     に対して <code class="literal">[]</code> や <code class="literal">{}</code>
     でアクセスすると、何もメッセージを出さずに単に <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> を返します。
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     文字列リテラル内の文字に対して
     <code class="literal">[]</code> や <code class="literal">{}</code> でアクセスすることができます。
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     文字列リテラル内の文字に対して、
     <code class="literal">{}</code> を使ってアクセスする機能は、
     PHP 7.4 で非推奨になり、PHP 8.0 で削除されました。
    </p>
   </p></blockquote>

  </div>
 </div>

 <div class="sect2" id="language.types.string.useful-funcs">
  <h3 class="title">便利な関数および演算子</h3>

  <p class="para">
   文字列は、&#039;.&#039; (ドット) 結合演算子で結合することが可能です。&#039;+&#039;
   (加算) 演算子はこの例では出てこないことに注意してください。詳細については
   <a href="language.operators.string.php" class="link">文字列演算子</a>
   を参照ください。
  </p>

  <p class="para">
   文字列の修正を行う場合には、便利な関数がたくさん用意されています。
  </p>

  <p class="simpara">
   一般的な関数については、<a href="ref.strings.php" class="link">文字列関数の節</a>
   を参照ください。高度な検索/置換を行う関数については
   <a href="ref.pcre.php" class="link">Perl 互換の正規表現関数</a> を参照ください。
  </p>

  <p class="simpara">
   <a href="ref.url.php" class="link">URL 文字列用関数</a>や文字列の暗号化/
   復号用の関数 (<a href="ref.sodium.php" class="link">Sodium</a> および
   <a href="ref.hash.php" class="link">Hash</a>) もあります。
  </p>

  <p class="simpara">
   最後に、探しているものがまだ見付からない場合には、
   <a href="ref.ctype.php" class="link">文字型の関数</a>も参照ください。
  </p>
 </div>

 <div class="sect2" id="language.types.string.casting">
  <h3 class="title">文字列への変換</h3>
  
  <p class="para">
   <code class="literal">(string)</code> キャストや <span class="function"><a href="function.strval.php" class="function">strval()</a></span>
   関数を使って変数を文字列へ変換することができます。
   文字列型を必要とする式のスコープにおいて、文字列への変換は自動的に行われます。
   <span class="function"><a href="function.echo.php" class="function">echo</a></span> や <span class="function"><a href="function.print.php" class="function">print</a></span> 関数を使うとき、
   あるいは変数を文字列と比較するときにこの自動変換が行われます。
   マニュアルの<a href="language.types.php" class="link">型</a> と
   <a href="language.types.type-juggling.php" class="link">型の相互変換</a>
   の項を読むとわかりやすいでしょう。
   <span class="function"><a href="function.settype.php" class="function">settype()</a></span>も参照ください。
  </p>
  
  <p class="para">
   <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> の <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> は文字列の <code class="literal">&quot;1&quot;</code> に、
   <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> は <code class="literal">&quot;&quot;</code> (空文字列) に変換されます。
   これにより boolean と文字列の値を相互に変換することができます。
  </p>

  <p class="para"> 
   <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> (整数) や浮動小数点数 (<span class="type"><a href="language.types.float.php" class="type float">float</a></span>) は
   その数値の数字として文字列に変換されます (指数の表記や浮動小数点数を含めて)。
   浮動小数点数は、指数表記
   (<code class="literal">4.1E+6</code>) を使用して変換されます。
  </p>

  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    PHP 8.0.0 以降では、小数点を表す文字は常にピリオド (&quot;<code class="literal">.</code>&quot;) です。
    それより前のバージョンでは、
    スクリプトのロケール (LC_NUMERIC カテゴリ)
    によって決まります。
    <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span> を参照ください。
   </p>
  </p></blockquote>

  <p class="para">
   配列は常に <code class="literal">&quot;Array&quot;</code> という文字列に変換されるので、
   <span class="type"><a href="language.types.array.php" class="type array">array</a></span> の中を見るために <span class="function"><a href="function.echo.php" class="function">echo</a></span> や
   <span class="function"><a href="function.print.php" class="function">print</a></span> を使ってダンプさせることはできません。
   一つの要素を見るためには、<code class="literal">echo $arr[&#039;foo&#039;]</code>
   のようにしてください。内容の全てをダンプ/見るためには以降の TIP をご覧ください。
  </p>

  <p class="para">
   <span class="type"><a href="language.types.object.php" class="type object">object</a></span> を <span class="type"><a href="language.types.string.php" class="type string">string</a></span> へ変換するには、
  マジック・メソッド <a href="language.oop5.magic.php" class="link">__toString</a> を使用してください。
  </p>

  <p class="para">
   リソースは常に <code class="literal">&quot;Resource id #1&quot;</code>
   という文字列に変換されます。<code class="literal">1</code> は実行中の
   PHP によって割り当てられる
   <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> の番号です。
   この文字列の構造に依存したコードを書いてはいけません (この構造は変わる可能性があります)
   が、スクリプトの実行中 (ウェブのリクエストや CLI プロセスの処理中) は、指定したリソースに対してこの文字列が一意に割り当てられることが保証されます。
   他のリソースで同じ文字列が再利用されることはありません。
   リソースの型を知るためには <span class="function"><a href="function.get-resource-type.php" class="function">get_resource_type()</a></span>
   を使用してください。
  </p>

  <p class="para">
   <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> は常に空文字列に変換されます。
  </p>
  
  <p class="para">
   以上に述べたように、配列、オブジェクト、リソースをプリントアウトしても
   その値に関する有益な情報を得られるわけではありません。
   デバッグのために値を出力するのによりよい方法が知りたければ、
   <span class="function"><a href="function.print-r.php" class="function">print_r()</a></span> や
   <span class="function"><a href="function.var-dump.php" class="function">var_dump()</a></span> を参照ください。
  </p>
  
  <p class="para">
   PHP 変数を恒久的に保存するための文字列に変換することもできます。
   この方法はシリアライゼーションと呼ばれ、
   <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span> 関数によって実現できます。
  </p>
 </div>

 <div class="sect2" id="language.types.string.details">
  
  <h3 class="title">文字列型の詳細</h3>
  
  <p class="para">
   PHP における文字列型は、バイトの配列と整数値 (バッファ長) で実装されています。
   バイト列を文字列に変換する方法については何の情報も持っておらず、完全にプログラマ任せとなっています。
   文字列を構成する値には何の制限もありません。特に気をつけるべきなのは、
   値 <code class="literal">0</code> のバイト (いわゆる “NUL バイト”) を文字列内のどの部分にでも使えるという点です
   (しかし、このマニュアル上で「バイナリセーフではない」とされている一部の関数では、
   受け取った文字列をライブラリに渡すときに NUL バイト以降を無視することがあります)。
  </p>
  <p class="para">
   PHP の文字列型の正体を知ってしまえば、なぜ PHP には「バイト型」が存在しないのかもわかります。
   つまり、文字列型がその役割を受け持っているのです。テキスト以外のデータ、
   たとえばネットワークソケットから読み込んだ任意のデータを返す関数も、
   文字列で値を返します。
  </p>
  <p class="para">
   PHP が文字列に対して特定のエンコーディングを強制しないのなら、
   いったいどのようにして文字列リテラルをエンコードしているのでしょう?
   たとえば、文字列 <code class="literal">&quot;á&quot;</code> と同等なのは <code class="literal">&quot;\xE1&quot;</code> (ISO-8859-1)、
   <code class="literal">&quot;\xC3\xA1&quot;</code> (UTF-8, C form)、
   <code class="literal">&quot;\x61\xCC\x81&quot;</code> (UTF-8, D form) のどれでしょう?
   あるいはそれ以外の何かなのでしょうか?
   実は、文字列のエンコードはスクリプトファイルのエンコード方式に従って行われるというのが正解です。
   したがって、もしスクリプトが ISO-8859-1 で書かれているのなら、文字列も ISO-8859-1
   でエンコードされます。その他のエンコードの場合も同様です。
   しかし、Zend Multibyte が有効になっている場合は話が別です。
   この場合は、スクリプトはどんなエンコーディングで書いてもかまいません
   (明示的に宣言することもできるし、自動検出させることもできます)。
   スクリプトはその後で内部エンコーディングに変換されるので、
   文字列リテラルも内部エンコーディングと同じ方式で符号化されます。
   スクリプトのエンコーディング (あるいは、Zend Multibyte
   を有効にした場合の内部エンコーディング) には、一部制限があることに注意しましょう。
   ひとことで言うと、ASCII の上位互換 でなければならないということです。
   UTF-8 や ISO-8859-1 などがこれにあたります。
   しかし、状態に依存する
   (たとえば、同じバイト値が、先頭にあるときとシフト状態にあるときで違う意味になる)
   エンコーディングは、問題になる可能性があります。
  </p>
  <p class="para">
   もちろん、利便性を考慮すれば、テキストを操作する関数が文字列のエンコードを扱う際に
   何らかの前提に基づかざるを得ないこともあります。
   残念ながら、PHP の各関数が文字列のエンコーディングを判断する方法はまったく統一されていません。
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     いくつかの関数は、文字列が何らかのシングルバイトエンコーディングで符号化されているものと見なします。
     しかし、文字列内の各バイトが必ずしも特定の文字に変換できなくてもかまいません。
     このタイプの関数は、<span class="function"><a href="function.substr.php" class="function">substr()</a></span> や
     <span class="function"><a href="function.strpos.php" class="function">strpos()</a></span>、<span class="function"><a href="function.strlen.php" class="function">strlen()</a></span>、
     <span class="function"><a href="function.strcmp.php" class="function">strcmp()</a></span> などです。
     これらの関数については、文字列を扱うというよりメモリ上のバッファを扱うものととらえてもよいでしょう。
     つまり、バイト列とバイトオフセットで考えるということです。
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     文字列のエンコーディングを受け取る関数もあります。
     エンコーディング情報を省略したときにはデフォルトを用意していることもあるでしょう。
     このタイプの関数の例は、<span class="function"><a href="function.htmlentities.php" class="function">htmlentities()</a></span> や
     大半の <a href="book.mbstring.php" class="link">mbstring</a> 関数です。
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     現在のロケール (<span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span> を参照ください) を使うけれども、
     処理はバイト単位で行う関数もあります。
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     最後に、文字列が特定のエンコーディング (たいていは UTF-8)
     であることを前提としている関数があります。
     <a href="book.intl.php" class="link">intl</a> の関数や
     <a href="book.pcre.php" class="link">PCRE</a> の関数
     (<code class="literal">u</code> 修飾子を使う場合のみ)
     の多くがこのタイプになります。
    </span>
   </li>
  </ul>

  <p class="para">
   結局、Unicode を使うプログラムをきちんと書くには、
   うまく動かない関数を使わないよう注意するしかないということです。
   特にデータを破壊してしまう可能性のある関数の使用は避け、
   きちんと動作する関数を使うようにしましょう。
   <a href="book.intl.php" class="link">intl</a> や
   <a href="book.mbstring.php" class="link">mbstring</a>
   の関数を選択するとよいでしょう。
   しかし、Unicode をまともに扱える関数を使うというのは単なる始まりに過ぎません。
   たとえ関数側で Unicode を扱う機能があったとしても、
   Unicode の仕様に関する知識は不可欠です。
   たとえば、世の中には大文字と小文字しか存在しないという思い込みで作ったプログラムは、
   うまく動かない可能性があります。
  </p>
 </div>
</div><?php manual_footer($setup); ?>