<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.variables.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'language.variables.basics.php',
    1 => '基本的な事',
    2 => '基本的な事',
  ),
  'up' => 
  array (
    0 => 'language.variables.php',
    1 => '変数',
  ),
  'prev' => 
  array (
    0 => 'language.variables.php',
    1 => '変数',
  ),
  'next' => 
  array (
    0 => 'language.variables.predefined.php',
    1 => '定義済みの変数',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'language/variables.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.variables.basics" class="sect1">
   <h2 class="title">基本的な事</h2>

   <p class="simpara">
    PHP の変数はドル記号の後に変数名が続く形式で表されます。
    変数名は大文字小文字を区別します。
   </p>

   <p class="para">
    変数名は、文字
    (<code class="literal">A-Z</code>, <code class="literal">a-z</code>,
     128から255 までのバイト) で始まり、
    任意の数の文字、
    数字、アンダースコアが続きます。正規表現を使うと、これは次の
    ように表現することができます。
    <code class="code">^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$</code>
   </p>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     PHP は Unicode の変数名はサポートしていませんが、
     (UTF-8のような)文字エンコーディングによっては、
     マルチバイト文字の全てのバイトを可能な範囲にまでエンコードする場合があり、
     その結果正しい変数名になる場合があります。
    </span>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     <code class="literal">$this</code> は特別な変数であり、ここに代入することはできません。
     PHP 7.1.0 より前のバージョンでは、
     (<a href="language.variables.variable.php" class="link">可変変数</a> を使った)
     間接的な代入 が可能でした。
    </span>
   </p></blockquote>

   <div class="tip"><strong class="tip">ヒント</strong><p class="simpara">
<a href="userlandnaming.php" class="xref">ユーザーレベルでの命名の手引き</a> も参照ください。</p></div>

   <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 />$var </span><span style="color: #007700">= </span><span style="color: #DD0000">'Bob'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$Var </span><span style="color: #007700">= </span><span style="color: #DD0000">'Joe'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$var</span><span style="color: #DD0000">, </span><span style="color: #0000BB">$Var</span><span style="color: #DD0000">"</span><span style="color: #007700">;      </span><span style="color: #FF8000">// outputs "Bob, Joe"<br /><br /></span><span style="color: #0000BB">$_4site </span><span style="color: #007700">= </span><span style="color: #DD0000">'not yet'</span><span style="color: #007700">;    </span><span style="color: #FF8000">// valid; starts with an underscore<br /></span><span style="color: #0000BB">$täyte </span><span style="color: #007700">= </span><span style="color: #DD0000">'mansikka'</span><span style="color: #007700">;    </span><span style="color: #FF8000">// valid; 'ä' is (Extended) ASCII 228.<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <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 /></span><span style="color: #007700">$</span><span style="color: #0000BB">4site </span><span style="color: #007700">= </span><span style="color: #DD0000">'not yet'</span><span style="color: #007700">;     </span><span style="color: #FF8000">// invalid; starts with a number</span></span></code></div>
    </div>

   </div>

   <p class="simpara">
    PHP は、任意のバイトの連続を変数名として受け入れます。
    既に述べたルールに従わない変数名は、実行時にのみ動的にアクセスできます。
    アクセスする方法については
    <a href="language.variables.variable.php" class="link">可変変数</a>
    を参照ください。
   </p>

   <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">${</span><span style="color: #DD0000">'invalid-name'</span><span style="color: #007700">} = </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #DD0000">'invalid-name'</span><span style="color: #007700">;<br />echo ${</span><span style="color: #DD0000">'invalid-name'</span><span style="color: #007700">}, </span><span style="color: #DD0000">" "</span><span style="color: #007700">, $</span><span style="color: #0000BB">$name</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="cdata"><pre>
bar bar
</pre></div>
    </div>
   </div>

   <p class="para">
    デフォルトでは、変数に代入されるのは常にその値です。
    これは、つまり、ある変数にある式を代入する際、元の式の
    値全体がコピーされる側の変数にコピーされるということです。
    これは、例えば、ある変数の値を他の変数に代入した後で、
    これらの変数の1つを変更しても他の変数には影響を与えないという
    ことを意味します。この種の代入に関するより詳細な情報については、
    <a href="language.expressions.php" class="link">式</a> を参照ください。
   </p>
   <p class="para">
    PHP には、変数に値の代入を行う別の方法も存在します。それは、
    <em>参照による代入</em> です。
    この場合、新規の変数は元の変数を参照するだけです。
    (言いかえると、元の変数の&quot;エイリアスを作る&quot;または元の変数を&quot;指す&quot;)
    新規の変数への代入は、元の変数に影響し、その逆も同様となります。
   </p>
   <p class="para">
   参照により代入を行うには、代入する変数(ソース変数)の先頭に
   アンパサンドを加えます。たとえば、次の簡単なコードは
   &#039;<code class="literal">My name is Bob</code>&#039;を二度出力します。

    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$foo </span><span style="color: #007700">= </span><span style="color: #DD0000">'Bob'</span><span style="color: #007700">;              </span><span style="color: #FF8000">// 値'Bob'を$fooに代入する。<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$foo</span><span style="color: #007700">;              </span><span style="color: #FF8000">// $fooを$barにより参照<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= </span><span style="color: #DD0000">"My name is </span><span style="color: #0000BB">$bar</span><span style="color: #DD0000">"</span><span style="color: #007700">;  </span><span style="color: #FF8000">// $barを変更...<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;                 </span><span style="color: #FF8000">// $fooも変更される。<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>

   <p class="para">
    注意すべき重要な点として、変数のみが参照により代入できる
    ということがあります。
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$foo </span><span style="color: #007700">= </span><span style="color: #0000BB">25</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$foo</span><span style="color: #007700">;      </span><span style="color: #FF8000">// これは有効な代入です。<br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &amp;(</span><span style="color: #0000BB">24 </span><span style="color: #007700">* </span><span style="color: #0000BB">7</span><span style="color: #007700">);  </span><span style="color: #FF8000">// 無効です。名前のない式を参照しています。<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">() {<br />   return </span><span style="color: #0000BB">25</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">test</span><span style="color: #007700">();    </span><span style="color: #FF8000">// 無効。なぜなら、リファレンスで値を返していないからです。<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
 
   <p class="para">
    PHP では変数を初期化する必要はありませんが、
    そうするのはとてもよいことです。
    初期化されていない場合、
    <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>
    (PHP 8.0.0 より前のバージョンでは <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>)
    が発生します。
    未定義の変数は、デフォルト値 <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> を持ちます。
    変数が既に初期化済みかどうかを検知するには、
    言語構造 <span class="function"><a href="function.isset.php" class="function">isset()</a></span> が使えます。
   </p>
   <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: #FF8000">// Unset AND unreferenced (no use context) variable.<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$unset_var</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="cdata"><pre>
Warning: Undefined variable $unset_var in ...
NULL
</pre></div>
     </div>
    </div>
   </p>

   <p class="simpara">
    PHP は、未定義の変数からの配列の autovivification
    (新しい配列の自動生成) を許可しています。
    未定義の変数に要素を追加する操作は、
    新しい配列を生成し、警告は発生しません。
   </p>
   <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 />$unset_array</span><span style="color: #007700">[] = </span><span style="color: #DD0000">'value'</span><span style="color: #007700">; </span><span style="color: #FF8000">// 警告は発生しません<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <div class="warning"><strong class="warning">警告</strong>
    <p class="simpara">
    初期化されていない変数のデフォルト値に依存すると、そのファイルを
    include している別のファイルで同名の変数が使用されていた場合に問題を起こします。
    </p>
   </div>

   <p class="simpara">
    変数は、言語構造
    <span class="function"><a href="function.unset.php" class="function">unset()</a></span>
    を使って破棄できます。
   </p>

   <p class="simpara">
    変数に関連した関数については、
    <a href="ref.var.php" class="link">関数リファレンス</a>
    を参照ください。
   </p>
  </div><?php manual_footer($setup); ?>