<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.operators.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'language.operators.assignment.php',
    1 => '代入演算子',
    2 => '代入演算子',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => '演算子',
  ),
  'prev' => 
  array (
    0 => 'language.operators.increment.php',
    1 => '加算子/減算子',
  ),
  'next' => 
  array (
    0 => 'language.operators.bitwise.php',
    1 => 'ビット演算子',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'language/operators/assignment.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.operators.assignment" class="sect1">
 <h2 class="title">代入演算子</h2>
 
 <p class="simpara">
  代入演算子の基本となるものは &quot;=&quot; です。この演算子に関して最初に
  思い付く意味は&quot;等しい&quot;であるかもしれません。しかし、そうではありません。
  本当は、左オペランドに右オペランドの式の値を設定する(&quot;得て代入する&quot;)
  ことを意味します。
 </p>
 <p class="para">
  代入式の値は、代入される値です。つまり、&quot;<code class="literal">$a = 3</code>&quot; の値は、3 です。
  これにより、以下のようなトリッキーなことができるようになります。
  <div class="example" id="example-1">
   <p><strong>例1 ネストした代入</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= (</span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">) + </span><span style="color: #0000BB">5</span><span style="color: #007700">; </span><span style="color: #FF8000">// $a は 9 に等しくなり、$b には 4 が代入されます<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</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>
 <p class="para">
  基本代入演算子に加えて、全ての<a href="language.operators.php" class="link">
  演算子</a>、配列結合および文字列演算子に関して
  「複合演算子」があります。
  これにより、式の中の値を使用し、その値をその式の結果とすることができます。
  例えば、
  <div class="example" id="example-2">
   <p><strong>例2 複合代入</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">+= </span><span style="color: #0000BB">5</span><span style="color: #007700">; </span><span style="color: #FF8000">// $a を 8 にセットします。$a = $a + 5; と同じです。<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #DD0000">"Hello "</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">.= </span><span style="color: #DD0000">"There!"</span><span style="color: #007700">; </span><span style="color: #FF8000">// $bを"Hello There!"にセットします。$b = $b . "There!";と同じです。<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</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">
  PHP では通常は値による代入になりますが、
  オブジェクトは参照で代入されます。
  オブジェクトを明示的にコピーするには
  <a href="language.oop5.cloning.php" class="link">clone</a> キーワードを使います。
 </p>

 <div class="sect2" id="language.operators.assignment.reference">
  <h3 class="title">参照による代入</h3>
  <p class="para">
   参照による代入もサポートしており、
   &quot;<span class="computeroutput">$var = &amp;$othervar;</span>&quot; 構文で使うことができます。
   参照による代入とは、両方の変数が同じデータを指すようにするということです。
   データのコピーは発生しません。
  </p>
  <p class="para">
   <div class="example" id="example-3">
    <p><strong>例3 参照による代入</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$a</span><span style="color: #007700">; </span><span style="color: #FF8000">// $b は $a への参照です<br /><br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$a</span><span style="color: #DD0000">\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// 表示: 3<br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$b</span><span style="color: #DD0000">\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// 表示: 3<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">; </span><span style="color: #FF8000">// change $a<br /><br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$a</span><span style="color: #DD0000">\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// 表示: 4<br /></span><span style="color: #007700">print </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$b</span><span style="color: #DD0000">\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// 表示: 4<br />            // $b の参照先は $a であり、その値が変わったからです<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   <a href="language.oop5.basic.php#language.oop5.basic.new" class="link">new</a>
   演算子は自動的に参照を返します。そのため、
   <a href="language.oop5.basic.php#language.oop5.basic.new" class="link">new</a> の結果を参照で代入するとエラーが発生します。
  </p>
  <p class="para">
   <div class="example" id="example-4">
    <p><strong>例4 new 演算子の参照</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">C </span><span style="color: #007700">{}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= &amp;new </span><span style="color: #0000BB">C</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>
Parse error: syntax error, unexpected token &quot;;&quot;, expecting &quot;(&quot;
</pre></div>
    </div>
   </div>
  </p>
  <p class="para">
   参照に関する詳細な情報やその使い方については、このマニュアルの
   <a href="language.references.php" class="link">リファレンスに関する説明</a>
   をご覧ください。
  </p>
 </div>

 <div class="sect2" id="language.operators.assignment.arithmetic">
  <h3 class="title">算術代入演算子</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>例</th>
      <th>同一の結果になる操作</th>
      <th>演算</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>$a += $b</td>
      <td>$a = $a + $b</td>
      <td>加算</td>
     </tr>

     <tr>
      <td>$a -= $b</td>
      <td>$a = $a - $b</td>
      <td>減算</td>
     </tr>

     <tr>
      <td>$a *= $b</td>
      <td>$a = $a * $b</td>
      <td>乗算</td>
     </tr>

     <tr>
      <td>$a /= $b</td>
      <td>$a = $a / $b</td>
      <td>除算</td>
     </tr>

     <tr>
      <td>$a %= $b</td>
      <td>$a = $a % $b</td>
      <td>剰余</td>
     </tr>

     <tr>
      <td>$a **= $b</td>
      <td>$a = $a ** $b</td>
      <td>べき乗</td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="sect2" id="language.operators.assignment.bitwise">
  <h3 class="title">ビット代入演算子</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>例</th>
      <th>同一の結果になる操作</th>
      <th>演算</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>$a &amp;= $b</td>
      <td>$a = $a &amp; $b</td>
      <td>ビット積</td>
     </tr>

     <tr>
      <td>$a |= $b</td>
      <td>$a = $a | $b</td>
      <td>ビット和</td>
     </tr>

     <tr>
      <td>$a ^= $b</td>
      <td>$a = $a ^ $b</td>
      <td>排他的論理和</td>
     </tr>

     <tr>
      <td>$a &lt;&lt;= $b</td>
      <td>$a = $a &lt;&lt; $b</td>
      <td>左シフト</td>
     </tr>

     <tr>
      <td>$a &gt;&gt;= $b</td>
      <td>$a = $a &gt;&gt; $b</td>
      <td>右シフト</td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="sect2" id="language.operators.assignment.other">
  <h3 class="title">その他の代入演算子</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>例</th>
      <th>同一の結果になる操作</th>
      <th>演算</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>$a .= $b</td>
      <td>$a = $a . $b</td>
      <td>文字列の結合</td>
     </tr>

     <tr>
      <td>$a ??= $b</td>
      <td>$a = $a ?? $b</td>
      <td>Null合体</td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="sect2" id="language.operators.assignment.see-also">
   <h3 class="title">参考</h3>
   <p class="para">
    <ul class="simplelist">
     <li><a href="language.operators.arithmetic.php" class="link">算術演算子</a></li>
     <li><a href="language.operators.bitwise.php" class="link">ビット演算子</a></li>
     <li><a href="language.operators.comparison.php#language.operators.comparison.coalesce" class="link">Null 合体演算子</a></li>
    </ul>
   </p>
 </div>
</div><?php manual_footer($setup); ?>