mirror of
https://github.com/php/doc-ja.git
synced 2026-03-23 22:52:11 +01:00
254 lines
12 KiB
XML
254 lines
12 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: f4f96ef8b2a95283c92ea2183fe1dedf06f3ad22 Maintainer: hirokawa Status: ready -->
|
|
<!-- CREDITS: takagi,mumumu -->
|
|
<chapter xml:id="language.expressions" xmlns="http://docbook.org/ns/docbook">
|
|
<title>式</title>
|
|
|
|
<simpara>
|
|
式は、PHP における最も重要なビルディングブロックです。PHPにおいては、ほとんど全てのものは式で記述されます。
|
|
最も簡単で最も正確な式の定義は、"値があるもの全て"です。
|
|
</simpara>
|
|
|
|
<simpara>
|
|
考えられる簡単な例は、定数と変数です。
|
|
<code>$a = 5</code> と入力すると、
|
|
<varname>$a</varname> に <code>5</code> を代入することになります。
|
|
<code>5</code> は、明らかに、 5 という値です。
|
|
言葉を変えると <code>5</code> は 5 という値を有する式なのです。
|
|
(この場合、<code>5</code> は整数定数です。)
|
|
</simpara>
|
|
|
|
<simpara>
|
|
この代入の後、<varname>$a</varname> の値は、5 であることが期待されます。
|
|
よって、<code>$b = $a</code> と書いた場合、<code>$b = 5</code> と書いたのと
|
|
同じように動作することが期待されます。
|
|
言い換えると <varname>$a</varname> は 5 という値を持つ式なのです。
|
|
全てが正しく動作する場合、何が起こるかをこのことが正確に表現しています。
|
|
</simpara>
|
|
|
|
<para>
|
|
式をもう少し複雑にしたのが関数です。
|
|
例えば、次の関数を考えてみましょう。
|
|
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
function foo () {
|
|
return 5;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
|
|
<simpara>
|
|
あなたが関数の概念に慣れていると仮定すると
|
|
(そうでない場合は、<link linkend="language.functions">関数</link>
|
|
に関する章を参照ください。)、
|
|
<code>$c = foo()</code> と入力することは、
|
|
<code>$c = 5</code> と書くことと本質的に全く同じで
|
|
あると予想されたかもしれません。この予想は、正しいです。
|
|
関数は、その戻り値を値とする式なのです。
|
|
<code>foo()</code> は 5 を返すので、式 '<code>foo()</code>' の値は 5 です。
|
|
通常、関数は、決まった数だけを返すのではなく、何かを計算します。
|
|
</simpara>
|
|
|
|
<simpara>
|
|
もちろん、PHP の値は整数である必要はありませんし、
|
|
多くの場合、そうではありません。
|
|
PHP は、4 種類のスカラー型: 整数(<type>int</type>)、
|
|
浮動小数点数(<type>float</type>)、文字列(<type>string</type>)、
|
|
真偽値(<type>bool</type>) をサポートします。
|
|
(スカラーとは、配列とかと異なり、より小さな部分に'分割する'ことができない値のことです。)
|
|
PHP は、2種類の複合(非スカラー)型(配列とオブジェクト)もサポートします。
|
|
これらの型の値は、変数に代入することができ、
|
|
関数からの戻り値とすることができます。
|
|
</simpara>
|
|
|
|
<simpara>
|
|
PHP は、他の多くの言語が行うのと同じ手法で、
|
|
更に多くの式を使用可能です。
|
|
PHP は、ほとんど全てが式であるという意味で、式指向の言語です。
|
|
既に取り扱った <code>$a = 5</code> という例について考えてみましょう。
|
|
この式には、整数定数の <code>5</code> と 5 に更新された <varname>$a</varname> の値という
|
|
2 つの値が現れているということに容易に気づくことでしょう。
|
|
しかし、実際には、ここにはもうひとつの値が含まれています。
|
|
それは、代入自体の値です。
|
|
代入式は、それ自体、代入値を評価します。
|
|
この場合、その値は 5 になります。
|
|
このことは、実際には、<code>$a = 5</code> は、それが何をするかによらず、
|
|
値 5 を有する式であることを意味します。
|
|
つまり、
|
|
<code>$b = ($a = 5)</code> のように書くことは、
|
|
<code>$a = 5; $b = 5;</code> と書くのと
|
|
同様なのです。(セミコロンは、文の終わりを示します。)
|
|
代入は、右から左へ実行されるため、<code>$b = $a = 5</code>
|
|
と書くことも可能です。
|
|
</simpara>
|
|
|
|
<simpara>
|
|
式の配置に関する別の良い例は、前置、後置加算子、あるいは減算子です。
|
|
PHP と他の多くの言語のユーザーは、<code>variable++</code> や
|
|
<code>variable--</code> といった表記法に慣れていることでしょう。
|
|
これらは、<link linkend="language.operators.increment">加算子および減算子</link>です。
|
|
PHP においては、C 言語のように、
|
|
前置加算と後置加算という、2 種類の加算があります。
|
|
前置加算と後置加算は、両方とも、基本的には変数を増加させ、
|
|
変数に対する効果は同じです。
|
|
異なっているのは、加算する式の値です。
|
|
|
|
前置加算は、<code>++$variable</code> と書かれますが、
|
|
加算後の値を評価します
|
|
(PHP はその値を読む前に変数を増加させるので、'前置加算(pre-increment)'
|
|
という名前がついています)。
|
|
後置加算は、<code>$variable++</code> と書かれますが、加算される前の
|
|
<varname>$variable</varname> の元の値を評価します。
|
|
(PHP は、その値を読んだ後に変数を増加させるので、
|
|
'後置加算(post-increment)' という名前がついています。)
|
|
</simpara>
|
|
<simpara>
|
|
<link linkend="language.operators.comparison">比較</link>演算子は、
|
|
極めて標準的な式です。
|
|
比較演算子は、&false; または &true; のどちらかを値とします。
|
|
PHPは、>(大なり)、 >=(大なりイコール)、=(イコール)、
|
|
<(小なり)、<=(小なりイコール)をサポートします。
|
|
PHP 言語は、いくつかの厳密な等価演算子: ===
|
|
(イコールかつ同じ型) そして !== (イコールではないまたは型が違う) も
|
|
サポートします。
|
|
これらの式は、<code>if</code>文のような条件式の内部で一般的に
|
|
使用されます。
|
|
</simpara>
|
|
<simpara>
|
|
式の最後の例として、ここでは、演算子+代入式の複合演算式
|
|
を扱います。
|
|
既にご存知のように、<varname>$a</varname> に 1 を加えたい場合は、<code>$a++</code> または
|
|
<code>++$a</code> と書くだけで十分です。
|
|
しかし、1より大きな数、例えば 3 を加えたい場合は、どうすればよいのでしょう?
|
|
<code>$a++</code> を複数回使うこともできますが、当然これはあまり効率的で快適な手法ではありません。
|
|
ふつうは、<code>$a = $a + 3</code> と書きます。
|
|
<code>$a + 3</code> の部分で <varname>$a</varname> の値に 3 を加えた値を評価し、
|
|
その結果を <varname>$a</varname> に代入するというわけです。
|
|
この結果、<varname>$a</varname> に 3 が加えられます。
|
|
|
|
PHP においては、C のような他の言語と同様に、
|
|
この例をより短かく書くことができます。
|
|
これにより、より明確になり、同時に理解も迅速になります。
|
|
<varname>$a</varname> の現在の値に 3 を加える式は、<code>$a += 3</code> と書くことができます。
|
|
この式の正確な意味は、
|
|
"<varname>$a</varname> の値を取得し、それに 3 を加え、<varname>$a</varname> に再代入しなさい。"
|
|
です。
|
|
より短く、明確になっただけでなく、実行もより高速になります。
|
|
<code>$a += 3</code> の値は、通常の代入と同様に、代入された値です。
|
|
この値は 3 ではなく、<varname>$a</varname> に 3 を加えた加算値
|
|
(この値が、<varname>$a</varname> に代入された値です)であることに注意してください。
|
|
<code>$a -= 5</code> (<varname>$a</varname> から 5 を引く)
|
|
や <code>$b *= 7</code> (<varname>$b</varname> に 7 をかける)等のように、
|
|
全ての 2 項演算子は、この演算子+代入式のモードで使用することができます。
|
|
</simpara>
|
|
|
|
<para>
|
|
もう一種類、三項演算子(ternary operator)を用いた式がありますが、
|
|
他の言語で見たことがない場合には理解できないかもしれません。
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$first ? $second : $third
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
<para>
|
|
最初の部分式の値が &true; (非ゼロ)の場合、二番目の部分式が評価され、
|
|
この条件文の結果となります。
|
|
そうでない場合、三番目の部分式が評価され、この文の値となります。
|
|
</para>
|
|
|
|
<para>
|
|
次の例は、前置および後置加算子と多少一般的な式の理解を
|
|
助けてくれることでしょう。
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
function double($i) {
|
|
return $i*2;
|
|
}
|
|
$b = $a = 5; /* 値 5 を $a と $b に代入します */
|
|
$c = $a++; /* 後置加算なので、$c に代入される値は、$a の
|
|
元の値 (5) です */
|
|
$e = $d = ++$b; /* 前置加算なので、$d と $e に代入される値は、
|
|
加算後の $b の値 (6) です */
|
|
|
|
/* ここまでで、$d と $e は、6 です */
|
|
|
|
$f = double($d++); /* $f には、$d が加算される前の値を2倍した値、
|
|
つまり 2*6 = 12 が、代入されます。 */
|
|
$g = double(++$e); /* $g には、$e が加算された後の値を2倍した値、
|
|
つまり 2*7 = 14 が、代入されます。 */
|
|
$h = $g += 10; /* まず、$g に 10 が加算され、24 になります。
|
|
代入値 (24) は、$h に代入されます。
|
|
そして、$h も同様に 24 になります。 */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
|
|
<simpara>
|
|
式が、文として扱われることがあります。
|
|
この場合、文は、'<code>式 ;</code>'、つまり式の後にセミコロンがついた形式です。
|
|
<code>$b = $a = 5;</code> において、<code>$a = 5</code> は有効な式ですが、
|
|
自身を値とする文ではありません。
|
|
しかし、<code>$b = $a = 5;</code> は有効な文です。
|
|
</simpara>
|
|
|
|
<simpara>
|
|
最後に、有益な事項として式の論理値について説明します。
|
|
多くのイベント、主に条件付き実行とループにおいて、
|
|
式の特定な値には関心がないが、&true; または &false; のどちらを
|
|
意味するかに関心があるということがあります。
|
|
|
|
<!-- (PHP には、専用の論理型がありません。): 間違い。PHPにはあります。 -->
|
|
|
|
定数&true;と&false;(大文字小文字を区別しない)は、論理型の値がとり得る
|
|
値です。必要に応じて式は論理値に変換されます。詳細な手法については、
|
|
<link linkend="language.types.typecasting">型キャストに関するセクション
|
|
</link>を参照ください。
|
|
</simpara>
|
|
<simpara>
|
|
PHP は、完全で強力な式の実装を提供します。
|
|
それを完全に記述することは、このマニュアルの範囲を超えています。
|
|
上記の例は、式とは何か、そして、便利な式をどうやって作るかということ
|
|
に関して良いアイデアを与えるに違いありません。
|
|
本マニュアルの残りの部分では<varname>expr</varname>という
|
|
マークを使用しますが、これは PHP の有効な式を意味します。
|
|
</simpara>
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
-->
|