<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/langref.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'language.expressions.php',
    1 => '式',
    2 => '式',
  ),
  'up' => 
  array (
    0 => 'langref.php',
    1 => '言語リファレンス',
  ),
  'prev' => 
  array (
    0 => 'language.constants.magic.php',
    1 => 'マジック定数',
  ),
  'next' => 
  array (
    0 => 'language.operators.php',
    1 => '演算子',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'language/expressions.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.expressions" class="chapter">
  <h1 class="title">式</h1>

  
  <p class="simpara">
   式は、PHP における最も重要なビルディングブロックです。PHPにおいては、ほとんど全てのものは式で記述されます。
   最も簡単で最も正確な式の定義は、&quot;値があるもの全て&quot;です。
  </p>

  <p class="simpara">
   考えられる簡単な例は、定数と変数です。
   <code class="code">$a = 5</code> と入力すると、
   <var class="varname">$a</var> に <code class="code">5</code> を代入することになります。
   <code class="code">5</code> は、明らかに、 5 という値です。
   言葉を変えると <code class="code">5</code> は 5 という値を有する式なのです。
   (この場合、<code class="code">5</code> は整数定数です。)
  </p>

  <p class="simpara">
   この代入の後、<var class="varname">$a</var> の値は、5 であることが期待されます。
   よって、<code class="code">$b = $a</code> と書いた場合、<code class="code">$b = 5</code> と書いたのと
   同じように動作することが期待されます。
   言い換えると <var class="varname">$a</var> は 5 という値を持つ式なのです。
   全てが正しく動作する場合、何が起こるかをこのことが正確に表現しています。
  </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 /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo </span><span style="color: #007700">() {<br />    return </span><span style="color: #0000BB">5</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>

  <p class="simpara">
   あなたが関数の概念に慣れていると仮定すると
   (そうでない場合は、<a href="language.functions.php" class="link">関数</a>
   に関する章を参照ください。)、
   <code class="code">$c = foo()</code> と入力することは、
   <code class="code">$c = 5</code> と書くことと本質的に全く同じで
   あると予想されたかもしれません。この予想は、正しいです。
   関数は、その戻り値を値とする式なのです。
   <code class="code">foo()</code> は 5 を返すので、式 &#039;<code class="code">foo()</code>&#039; の値は 5 です。
   通常、関数は、決まった数だけを返すのではなく、何かを計算します。
  </p>

  <p class="simpara">
   もちろん、PHP の値は整数である必要はありませんし、
   多くの場合、そうではありません。
   PHP は、4 種類のスカラー型: 整数(<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>)、文字列(<span class="type"><a href="language.types.string.php" class="type string">string</a></span>)、
   真偽値(<span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>) をサポートします。
   (スカラーとは、配列とかと異なり、より小さな部分に&#039;分割する&#039;ことができない値のことです。)
   PHP は、2種類の複合(非スカラー)型(配列とオブジェクト)もサポートします。
   これらの型の値は、変数に代入することができ、
   関数からの戻り値とすることができます。
  </p>

  <p class="simpara">
   PHP は、他の多くの言語が行うのと同じ手法で、
   更に多くの式を使用可能です。
   PHP は、ほとんど全てが式であるという意味で、式指向の言語です。
   既に取り扱った <code class="code">$a = 5</code> という例について考えてみましょう。
   この式には、整数定数の <code class="code">5</code> と 5 に更新された <var class="varname">$a</var> の値という
   2 つの値が現れているということに容易に気づくことでしょう。
   しかし、実際には、ここにはもうひとつの値が含まれています。
   それは、代入自体の値です。
   代入式は、それ自体、代入値を評価します。
   この場合、その値は 5 になります。
   このことは、実際には、<code class="code">$a = 5</code> は、それが何をするかによらず、
   値 5 を有する式であることを意味します。
   つまり、
   <code class="code">$b = ($a = 5)</code> のように書くことは、
   <code class="code">$a = 5; $b = 5;</code> と書くのと
   同様なのです。(セミコロンは、文の終わりを示します。)
   代入は、右から左へ実行されるため、<code class="code">$b = $a = 5</code>
   と書くことも可能です。
  </p>

  <p class="simpara">
   式の配置に関する別の良い例は、前置、後置加算子、あるいは減算子です。
   PHP と他の多くの言語のユーザーは、<code class="code">variable++</code> や
   <code class="code">variable--</code> といった表記法に慣れていることでしょう。
   これらは、<a href="language.operators.increment.php" class="link">加算子および減算子</a>です。
   PHP においては、C 言語のように、
   前置加算と後置加算という、2 種類の加算があります。
   前置加算と後置加算は、両方とも、基本的には変数を増加させ、
   変数に対する効果は同じです。
   異なっているのは、加算する式の値です。

   前置加算は、<code class="code">++$variable</code> と書かれますが、
   加算後の値を評価します
   (PHP はその値を読む前に変数を増加させるので、&#039;前置加算(pre-increment)&#039;
   という名前がついています)。
   後置加算は、<code class="code">$variable++</code> と書かれますが、加算される前の
   <var class="varname">$variable</var> の元の値を評価します。
   (PHP は、その値を読んだ後に変数を増加させるので、
   &#039;後置加算(post-increment)&#039; という名前がついています。)
  </p>
  <p class="simpara">
   <a href="language.operators.comparison.php" class="link">比較</a>演算子は、
   極めて標準的な式です。
   比較演算子は、<strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> または <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> のどちらかを値とします。
   PHPは、&gt;(大なり)、 &gt;=(大なりイコール)、=(イコール)、
   &lt;(小なり)、&lt;=(小なりイコール)をサポートします。
   PHP 言語は、いくつかの厳密な等価演算子: ===
   (イコールかつ同じ型) そして !== (イコールではないまたは型が違う) も
   サポートします。
   これらの式は、<code class="code">if</code>文のような条件式の内部で一般的に
   使用されます。
  </p>
  <p class="simpara">
   式の最後の例として、ここでは、演算子+代入式の複合演算式
   を扱います。
   既にご存知のように、<var class="varname">$a</var> に 1 を加えたい場合は、<code class="code">$a++</code> または
   <code class="code">++$a</code> と書くだけで十分です。
   しかし、1より大きな数、例えば 3 を加えたい場合は、どうすればよいのでしょう?
   <code class="code">$a++</code> を複数回使うこともできますが、当然これはあまり効率的で快適な手法ではありません。
   ふつうは、<code class="code">$a = $a + 3</code> と書きます。
   <code class="code">$a + 3</code> の部分で <var class="varname">$a</var> の値に 3 を加えた値を評価し、
   その結果を <var class="varname">$a</var> に代入するというわけです。
   この結果、<var class="varname">$a</var> に 3 が加えられます。
   
   PHP においては、C のような他の言語と同様に、
    この例をより短かく書くことができます。
    これにより、より明確になり、同時に理解も迅速になります。
    <var class="varname">$a</var> の現在の値に 3 を加える式は、<code class="code">$a += 3</code> と書くことができます。
    この式の正確な意味は、
    &quot;<var class="varname">$a</var> の値を取得し、それに 3 を加え、<var class="varname">$a</var> に再代入しなさい。&quot;
    です。
    より短く、明確になっただけでなく、実行もより高速になります。
    <code class="code">$a += 3</code> の値は、通常の代入と同様に、代入された値です。
    この値は 3 ではなく、<var class="varname">$a</var> に 3 を加えた加算値
    (この値が、<var class="varname">$a</var> に代入された値です)であることに注意してください。
    <code class="code">$a -= 5</code> (<var class="varname">$a</var> から 5 を引く)
    や <code class="code">$b *= 7</code> (<var class="varname">$b</var> に 7 をかける)等のように、
    全ての 2 項演算子は、この演算子+代入式のモードで使用することができます。
  </p>

  <p class="para">
   もう一種類、三項演算子(ternary operator)を用いた式がありますが、
   他の言語で見たことがない場合には理解できないかもしれません。
  </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 />$first </span><span style="color: #007700">? </span><span style="color: #0000BB">$second </span><span style="color: #007700">: </span><span style="color: #0000BB">$third<br />?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   最初の部分式の値が <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> (非ゼロ)の場合、二番目の部分式が評価され、
    この条件文の結果となります。
   そうでない場合、三番目の部分式が評価され、この文の値となります。
  </p>
  
  <p class="para">
   次の例は、前置および後置加算子と多少一般的な式の理解を
   助けてくれることでしょう。
  </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 /></span><span style="color: #007700">function </span><span style="color: #0000BB">double</span><span style="color: #007700">(</span><span style="color: #0000BB">$i</span><span style="color: #007700">) {<br />    return </span><span style="color: #0000BB">$i</span><span style="color: #007700">*</span><span style="color: #0000BB">2</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </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">/* 値 5 を $a と $b に代入します */<br /></span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">$a</span><span style="color: #007700">++;          </span><span style="color: #FF8000">/* 後置加算なので、$c に代入される値は、$a の<br />                       元の値 (5) です */<br /></span><span style="color: #0000BB">$e </span><span style="color: #007700">= </span><span style="color: #0000BB">$d </span><span style="color: #007700">= ++</span><span style="color: #0000BB">$b</span><span style="color: #007700">;     </span><span style="color: #FF8000">/* 前置加算なので、$d と $e に代入される値は、<br />                       加算後の $b の値 (6) です */<br /><br />/* ここまでで、$d と $e は、6 です */<br /><br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= </span><span style="color: #0000BB">double</span><span style="color: #007700">(</span><span style="color: #0000BB">$d</span><span style="color: #007700">++);  </span><span style="color: #FF8000">/* $f には、$d が加算される前の値を2倍した値、<br />                       つまり 2*6 = 12 が、代入されます。 */<br /></span><span style="color: #0000BB">$g </span><span style="color: #007700">= </span><span style="color: #0000BB">double</span><span style="color: #007700">(++</span><span style="color: #0000BB">$e</span><span style="color: #007700">);  </span><span style="color: #FF8000">/* $g には、$e が加算された後の値を2倍した値、<br />                        つまり 2*7 = 14 が、代入されます。 */<br /></span><span style="color: #0000BB">$h </span><span style="color: #007700">= </span><span style="color: #0000BB">$g </span><span style="color: #007700">+= </span><span style="color: #0000BB">10</span><span style="color: #007700">;      </span><span style="color: #FF8000">/* まず、$g に 10 が加算され、24 になります。<br />                       代入値 (24) は、$h に代入されます。<br />                       そして、$h も同様に 24 になります。 */<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  
  <p class="simpara">
   式が、文として扱われることがあります。
   この場合、文は、&#039;<code class="code">式 ;</code>&#039;、つまり式の後にセミコロンがついた形式です。
   <code class="code">$b = $a = 5;</code> において、<code class="code">$a = 5</code> は有効な式ですが、
   自身を値とする文ではありません。
   しかし、<code class="code">$b = $a = 5;</code> は有効な文です。
  </p>
  
  <p class="simpara">
   最後に、有益な事項として式の論理値について説明します。
   多くのイベント、主に条件付き実行とループにおいて、
   式の特定な値には関心がないが、<strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> または <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> のどちらを
   意味するかに関心があるということがあります。

   

   定数<strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>と<strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>(大文字小文字を区別しない)は、論理型の値がとり得る
   値です。必要に応じて式は論理値に変換されます。詳細な手法については、
  <a href="language.types.type-juggling.php#language.types.typecasting" class="link">型キャストに関するセクション
  </a>を参照ください。
  </p>
  <p class="simpara">
   PHP  は、完全で強力な式の実装を提供します。
   それを完全に記述することは、このマニュアルの範囲を超えています。
   上記の例は、式とは何か、そして、便利な式をどうやって作るかということ
   に関して良いアイデアを与えるに違いありません。
   本マニュアルの残りの部分では<var class="varname">expr</var>という
  マークを使用しますが、これは PHP の有効な式を意味します。
  </p>
 </div>
<?php manual_footer($setup); ?>