File: expressions.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (239 lines) | stat: -rw-r--r-- 12,224 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: 1.8 $ -->
  <chapter id="language.expressions">
   <title>式</title>

   <simpara>
   式は、PHP における最も重要な基盤石です。PHPにおいては、
   ほとんど全てのものは式で記述されます。
   最も簡単で最も正確な式の定義は、"全ての式には値がある。"
   です。</simpara>

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

   <simpara>
   この代入の後、$a の値は、5 であることが予想されます。
   よって、$b = $a と書いた場合、$b = 5 と書いたのと
   同じように動作することが予想されます。
   言い換えると $a は 5 という値を持つ式なのです。
   全てが正しく動作する場合、何が起こるかをこのことが正確に表現しています。</simpara>

   <para>
   少しだけより複雑な式の例は、関数です。
   例えば、次の関数を考えてみましょう。

    <informalexample>
     <programlisting role="php">
<![CDATA[
function foo () {
    return 5;
}
]]>
     </programlisting>
    </informalexample></para>

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

   <simpara>
   もちろん、PHP の値は整数である必要はありませんし、
   多くの場合、そうではありません。
   PHP は、3 種類のスカラー型(整数、浮動小数点数、文字列)をサポートします。
   (スカラーとは、配列とかと異なり、より小さな部分に'分割する'ことが
   できない値のことです。)
   PHP は、2種類の複合(非スカラー)型(配列とオブジェクト)もサポートします。
   これらの型の値は、変数に代入することができ、
   関数からの返り値とすることができます。</simpara>

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

  <simpara>
   式の配置に関する別の良い例は、前置、後置加算子、あるいは減算子です。
   PHP/FI 2 と他の多くの言語のユーザーは、variable++ や
   variable-- といった表記法に慣れていることでしょう。
   これらは、加算子および減算子です。
   PHP/FI 2 においては、文 '$a++' は値を持ちませんでした。
   (この文は、式ではありませんでした。)
   このため、この式に代入したり、なんらかの手法でこれを使用することが
   できませんでした。
   PHP は、C 言語のようにこれらの式を同時に作ることにより
   加算子、減算子の機能を拡張しました。
   PHP においては、C 言語のように、
   前置加算と後置加算という、2 種類の加算があります。
   前置加算と後置加算は、両方とも、基本的には変数を増加させ、
   変数に対する効果は同じです。
   異なっているのは、加算する式の値です。

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

   <para>
   もう一種類、terniary 条件文という式がありますが、
   他の言語で見たことがない場合には理解できないかもしれません。

    <informalexample><programlisting>
<![CDATA[
$first ? $second : $third
]]>
    </programlisting></informalexample>

    最初の部分式の値が &true; (非ゼロ)の場合、二番目の部分式が評価され、
    この条件文の結果となります。
    そうでない場合、三番目の部分式が評価され、この文の値となります。</para>

   <para>
   次の例は、前置および後置加算子と多少一般的な式の理解を
   助けてくれることでしょう。

    <informalexample>
     <programlisting>
<![CDATA[
function double($i) {
    return $i*2;
}
$b = $a = 5;        /* 値 5 を %a と $b に代入します */
$c = $a++;          /* 後置加算なので、$c に代入される値は、$a の
                       元の値 (5) です */
$e = $d = ++$b;     /* 前置加算なので、$d と 4e に代入される値は、
                       加算後の $b の値 (6) です */

/* ここままで、$d と $e は、6 です */

$f = double($d++);  /* $f には、$d が加算される<emphasis>前</emphasis>の値を2倍した値、
                       つまり 2*6 = 12 が、代入されます。
$g = double($++e);  /* $g には、$e が加算された<emphasis>後</emphasis>の値を2倍した値、
                        つまり 2*7 = 14 が、代入されます。
$h = $g += 10;      /* まず、$g に 10 が加算され、24 になります。代入値 (24) は、
                       $h に代入されます。そして、$a も同様に 24 になります。 */
]]>
      </programlisting>
    </informalexample>
   </para>

   <simpara>
   本章のはじめで、様々な文の型について書くと言いましたが、
   約束したように、式は、文なのです。
   しかし、全ての式がひとつの文なわけではありません。
   この場合、文は、'式'';' 、つまり式の後にセミコロンがついた形式です。
   '$b=$a=5' において、$a=5 は有効な式ですが、自身を値とする文では
   ありません。しかし、'$b=$a=5;' は有効な文です。</simpara>

   <simpara>
   最後に、有益な事項として式の論理値について説明します。
   多くのイベント、主に条件付き実行とループにおいて、
   式の特定な値には関心がないが、&true; または &false; のどちらを
   意味するかに関心があるということがあります。

   <!-- (PHP には、専用の論理型がありません。): 間違い。PHPにはあります。 -->

   定数&true;と&false;(大文字小文字を区別しない)は、論理型の値がとり得る
   値です。必要に応じて式は展開は論理的な

   PHP において式の真値は、perl に似た手法で計算されます。
   全ての非ゼロ数値は &true; (真)で、ゼロは &false; (偽)です。
   負の値は非ゼロであり、よって、&true; とみなされることに注意して下さい! 
   空の文字列と文字列 "0" は &false; ですが、その他の文字列は、&true; です。
   非スカラー値(配列とオブジェクト)に関しては、要素がない場合は &false; と
   みなされ、その他は &true; とみなされます。</simpara>

   <simpara>
   PHP  は、完全で強力な式の実装を提供します。
   それを完全に記述することは、このマニュアルの範囲を超えています。
   上記の例は、式とは何か、そして、便利な式をどうやって作るかということ
   に関して良いアイデアを与えるに違いありません。
   本マニュアルの残りの部分では 'expr' というマークを使用しますが、
   これは 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:"../../manual.ced"
 sgml-exposed-tags:nil
 sgml-local-catalogs:nil
 sgml-local-ecat-files:nil
 End:
 -->