fujimoto Thu Dec 27 10:10:05 2001 EDT Modified files: /phpdoc/ja/language control-structures.xml Log: updated translation.
Index: phpdoc/ja/language/control-structures.xml diff -u phpdoc/ja/language/control-structures.xml:1.22 phpdoc/ja/language/control-structures.xml:1.23 --- phpdoc/ja/language/control-structures.xml:1.22 Wed Dec 12 15:53:58 2001 +++ phpdoc/ja/language/control-structures.xml Thu Dec 27 10:10:05 2001 @@ -21,16 +21,22 @@ PHPでは、次のようなC言語に似た<literal>if</literal>構文が使用されます。 <informalexample> <programlisting> +<![CDATA] if (式) 文 +]]> </programlisting> </informalexample> </para> <simpara> - 式のセクションで記述したように式は論理値で評価されます。 + <link linkend="language.expressions">式のセクション</link>で + +記述したように<replaceable>式</replaceable>は論理値で評価されます。 <replaceable>式</replaceable>が&true;と評価された場合、 - PHPは文を実行します。&false;と評価された場合は、 - これを無視します。 + PHPは<replaceable>文</replaceable>を実行します。&false; + と評価された場合は、これを無視します。どのような値が + &false;と評価されるについては<link + linkend="language.types.boolean.casting">論理値への変換</link> + を参照してください。 </simpara> <para> 以下の例は、<replaceable>$a</replaceable>が<replaceable>$b</replaceable> @@ -38,8 +44,10 @@ を表示します。 <informalexample> <programlisting role="php"> +<![CDATA[ if ($a > $b) print "aはbより大きい"; +]]> </programlisting> </informalexample> </para> @@ -54,10 +62,12 @@ 代入します。 <informalexample> <programlisting role="php"> +<![CDATA[ if ($a > $b) { print "aはbより大きい"; $b = $a; } +]]> </programlisting> </informalexample> </para> @@ -85,11 +95,13 @@ <computeroutput>aはbよりも大きくない</computeroutput>と表示します。 <informalexample> <programlisting role="php"> +<![CDATA[ if ($a > $b) { print "aはbよりも大きい"; } else { print "aはbよりも大きくない"; } +]]> </programlisting> </informalexample> @@ -117,6 +129,7 @@ <computeroutput>aはbより小さい</computeroutput>を出力します。 <informalexample> <programlisting role="php"> +<![CDATA[ if ($a > $b) { print "aはbより大きい"; } elseif ($a == $b) { @@ -124,6 +137,7 @@ } else { print "aはbより小さい"; } +]]> </programlisting> </informalexample> </para> @@ -158,9 +172,11 @@ 別の構文の基本的な形式となります。 <informalexample> <programlisting role="php"> - <?php if ($a == 5): ?> - Aは5に等しい - <?php endif; ?> +<![CDATA[ +<?php if ($a == 5): ?> +Aは5に等しい +<?php endif; ?> +]]> </programlisting> </informalexample> </para> @@ -176,6 +192,7 @@ および<literal>else</literal>と共に使用しています。 <informalexample> <programlisting role="php"> +<![CDATA[ if ($a == 5): print "aは5に等しい"; print "..."; @@ -185,6 +202,7 @@ else print "aは5でも6でもない"; endif; +]]> </programlisting> </informalexample> </para> @@ -204,7 +222,9 @@ <literal>while</literal>ループの基本形は次のようになります。 <informalexample> <programlisting> +<![CDATA[ while (式) 文 +]]> </programlisting> </informalexample> </para> @@ -224,18 +244,21 @@ ループの中に複数の文をグループ化することができます。 <informalexample> <programlisting> +<![CDATA[ while (式): 文 ... endwhile; +]]> </programlisting> </informalexample> </para> <para> 次の例は同じです。両方共、1から10までの数を出力します。 <informalexample> - <programlisting> + <programlisting role="php"> +<![CDATA[ /* 例 1 */ $i = 1; -while ($i <= 10) { +while ($i <= 10) { print $i++; /* 出力される値は、足される前の $iの値です。 (後置加算) */ @@ -244,10 +267,11 @@ /* 例 2 */ $i = 1; -while ($i <= 10): +while ($i <= 10): print $i; $i++; endwhile; +]]> </programlisting> </informalexample> </para> @@ -270,10 +294,12 @@ <informalexample> <programlisting role="php"> +<![CDATA[ $i = 0; do { print $i; } while ($i>0); +]]> </programlisting> </informalexample> </para> @@ -291,13 +317,14 @@ 文を使用する方法です。次のコードは、この方法の例を示しています。 <informalexample> <programlisting role="php"> +<![CDATA[ do { - if ($i < 5) { + if ($i < 5) { print "i は十分大きくはありません。"; break; } $i *= $factor; - if ($i < $minimum_limit) { + if ($i < $minimum_limit) { break; } print "iはOKです。"; @@ -305,6 +332,7 @@ ...iを使った処理... } while(0); +]]> </programlisting> </informalexample> </para> @@ -324,7 +352,9 @@ <literal>for</literal>ループの構文は、次のようになります。 <informalexample> <programlisting> +<![CDATA[ for (式1; 式2; 式3) 文 +]]> </programlisting> </informalexample> </para> @@ -354,16 +384,17 @@ 次の例について考えてみましょう。以下の例は全て1~10までの数を表示します。 <informalexample> <programlisting role="php"> +<![CDATA[ /* 例 1 */ -for ($i = 1; $i <= 10; $i++) { +for ($i = 1; $i <= 10; $i++) { print $i; } /* 例 2 */ for ($i = 1;;$i++) { - if ($i > 10) { + if ($i > 10) { break; } print $i; @@ -373,7 +404,7 @@ $i = 1; for (;;) { - if ($i > 10) { + if ($i < 10) { break; } print $i; @@ -382,7 +413,8 @@ /* 例 4 */ -for ($i = 1; $i <= 10; print $i, $i++) ; +for ($i = 1; $i <= 10; print $i, $i++) ; +]]> </programlisting> </informalexample> </para> @@ -395,7 +427,9 @@ PHPは、<literal>for</literal>ループ用に"コロン構文"もサポートします。 <informalexample> <programlisting> +<![CDATA[ for (式1; 式2; 式3): 文; ...; endfor; +]]> </programlisting> </informalexample> </para> @@ -422,8 +456,10 @@ 最初の構文の便利な拡張になっています。 <informalexample> <programlisting> -foreach(array_expression as $value) statement -foreach(array_expression as $key => $value) statement +<![CDATA[ +foreach(array_expression as $value) 文 +foreach(array_expression as $key => $value) 文 +]]> </programlisting> </informalexample> </para> @@ -468,27 +504,31 @@ 既にご存知かと思いますが、以下の文は機能的に等価です。 <informalexample> <programlisting role="php"> +<![CDATA[ reset ($arr); while (list(, $value) = each ($arr)) { - echo "Value: $value<br>\n"; + echo "Value: $value<br>\n"; } foreach ($arr as $value) { - echo "Value: $value<br>\n"; + echo "Value: $value<br>\n"; } +]]> </programlisting> </informalexample> 以下の文も機能的に等価です。 <informalexample> <programlisting role="php"> +<![CDATA[ reset ($arr); while (list($key, $value) = each ($arr)) { - echo "Key: $key; Value: $value<br>\n"; + echo "Key: $key; Value: $value<br>\n"; } -foreach ($arr as $key => $value) { - echo "Key: $key; Value: $value<br>\n"; +foreach ($arr as $key => $value) { + echo "Key: $key; Value: $value<br>\n"; } +]]> </programlisting> </informalexample> </para> @@ -496,6 +536,7 @@ 使用法を示すためにその他の例を示します。 <informalexample> <programlisting role="php"> +<![CDATA[ /* foreach の例 1: 値のみ */ $a = array (1, 2, 3, 17); @@ -511,20 +552,20 @@ $i = 0; /* 説明用 */ foreach($a as $v) { - print "\$a[$i] => $v.\n"; + print "\$a[$i] => $v.\n"; } /* foreachの例3: キーと値 */ $a = array( - "one" => 1, - "two" => 2, - "three" => 3, - "seventeen" => 17 + "one" => 1, + "two" => 2, + "three" => 3, + "seventeen" => 17 ); -foreach($a as $k => $v) { - print "\$a[$k] => $v.\n"; +foreach($a as $k => $v) { + print "\$a[$k] => $v.\n"; } /* foreach の例4: 多次元配列 */ @@ -545,6 +586,7 @@ foreach(array(1, 2, 3, 4, 5) as $v) { print "$v\n"; } +]]> </programlisting> </informalexample> </para> @@ -565,12 +607,13 @@ <para> <informalexample> <programlisting role="php"> +<![CDATA[ $arr = array ('one', 'two', 'three', 'four', 'stop', 'five'); while (list (, $val) = each ($arr)) { if ($val == 'stop') { break; /* ここでは、'break 1;'と書くこともできる。 */ } - echo "$val<br>\n"; + echo "$val<br>\n"; } /* オプション引数を使用する。 */ @@ -578,15 +621,16 @@ while (++$i) { switch ($i) { case 5: - echo "At 5<br>\n"; + echo "At 5<br>\n"; break 1; /* switch構造のみを抜ける */ case 10: - echo "At 10; quitting<br>\n"; + echo "At 10; quitting<br>\n"; break 2; /* switchとwhileを抜ける */ default: break; } } +]]> </programlisting> </informalexample> </para> @@ -606,6 +650,7 @@ <para> <informalexample> <programlisting role="php"> +<![CDATA[ while (list ($key,$value) = each ($arr)) { if (!($key % 2)) { // キーが偶数の組をスキップ continue; @@ -614,18 +659,19 @@ } $i = 0; -while ($i++ < 5) { - echo "Outer<br>\n"; +while ($i++ < 5) { + echo "Outer<br>\n"; while (1) { - echo " Middle<br>\n"; + echo " Middle<br>\n"; while (1) { - echo " Inner<br>\n"; + echo " Inner<br>\n"; continue 3; } - echo "This never gets output.<br>\n"; + echo "This never gets output.<br>\n"; } - echo "Neither does this.<br>\n"; + echo "Neither does this.<br>\n"; } +]]> </programlisting> </informalexample> </para> @@ -645,6 +691,7 @@ 文を使っています。 <informalexample> <programlisting role="php"> +<![CDATA[ if ($i == 0) { print "iは0に等しい"; } @@ -666,6 +713,7 @@ print "iは2に等しい"; break; } +]]> </programlisting> </informalexample> </para> @@ -683,6 +731,7 @@ 次のCASE文を実行しつづけます。例えば、 <informalexample> <programlisting role="php"> +<![CDATA[ switch ($i) { case 0: print "iは0に等しい"; @@ -691,6 +740,7 @@ case 2: print "iは2に等しい"; } +]]> </programlisting> </informalexample> </para> @@ -715,6 +765,7 @@ この場合、次のcaseに付随する文に制御が移行します。 <informalexample> <programlisting role="php"> +<![CDATA[ switch ($i) { case 0: case 1: @@ -724,6 +775,7 @@ case 3: print "iは3です"; } +]]> </programlisting> </informalexample> </para> @@ -733,6 +785,7 @@ く必要があります。例を以下に示します。 <informalexample> <programlisting role="php"> +<![CDATA[ switch ($i) { case 0: print "iは0に等しい"; @@ -746,6 +799,7 @@ default: print "iは0,1,2に等しくない"; } +]]> </programlisting> </informalexample> </para> @@ -762,6 +816,7 @@ <informalexample> <programlisting role="php"> +<![CDATA[ switch ($i): case 0: print "iは0に等しい"; @@ -775,6 +830,7 @@ default: print "iは0でも1でも2でもない"; endswitch; +]]> </programlisting> </informalexample> </para> @@ -782,43 +838,103 @@ <sect1 id="control-structures.declare"> <title><literal>declare</literal></title> - <simpara> - <literal>declare</literal> 命令は、あるコードブロックの中のパーサ - の状態を一時的に変更するために使用されます。以下に例を示します。 - </simpara> <para> - <informalexample> + <literal>declare</literal> 命令は、あるコードブロックの中に + +実効命令をセットするために使用されます。<literal>declare</literal> + の文法は他の制御構造と似ています。 + <infoexample> + <programlisting> +<![CDATA[ +declare (命令) 文 +]]> + </programlisting> + </infoexample> + </para> + <para> + <literal>命令</literal>の箇所で、セットされた<literal> + declare</literal>ブロックの挙動を指定することが出来ます。 + 現在のところ、使用できる命令は<literal>ticks</literal>の + 一つだけです。(<link linkend="control-structures.declare.ticks"> + ticks</link>に関しては以下を参照してください) + </para> + <para> + <literal>declare</literal>ブロックの<literal>文</literal> + +の実行のされ方や実行時にどのような作用が起こるかについては + <literal>命令</literal>に何が指定されたかに依存します。 + </para> + <sect2 id="control-structures.declare.ticks"> + <title>ticks</title> + <para> + tickとは<literal>declare</literal>ブロックの実行中にパーサが + <replaceable>N</replaceable>個の低レベル命令を実行するごとに + 発生するイベントのことです。<replaceable>N</replaceable>の値は + <literal>declare</literal>ブロックの<literal>命令</literal>の箇所で + <literal>ticks=<replaceable>N</replaceable></literal>のように + 指定します。 + </para> + <para> + +tickごとに発生させるイベントは<function>register_tick_function</function> + +を使用して指定します。詳細は以下の例を参照してください。1回のtickで + 複数のイベントが起こり得ることに注意してください。 + </para> + <para> + <example> + <title>PHPのコードの一部をプロファイルする</title> <programlisting role="php"> -function tick() +<![CDATA[ +<pre> +<?php +// 呼び出されるとその時間を記録する関数 +function profile ($dump = FALSE) { - static $i; - printf("[tick i=%d]\n", ++$i); + static $profile; + + // 格納されたプロファイルを返し、その値を削除する + if ($dump) { + $temp = $profile; + unset ($profile); + return ($temp); + } + + $profile[] = microtime (); } -register_tick_function("tick"); +// tickハンドラの設定 +register_tick_function("profile"); + +// declareブロックの前で初期化しておく +profile (); -declare (ticks = 2) { - 1; 2; 3; +// 2命令ごとにtickを投げるように設定しブロックを実行する +declare (ticks=2) { + for ($x = 1; $x < 50; ++$x) { + echo similar_text (md5($x), md5($x*$x)), "<br>"; + } } + +// プロファイラに格納されたデータを表示する +print_r (profile (TRUE)); +?> +</pre> +]]> </programlisting> - </informalexample> - この例は、現在のパーサに実装されているパラメータ ticks を示してい - ます。tick は、パーサにより実行される<replaceable>N</replaceable> - 個の低レベル命令毎に生じるイベントです。ただし、 - <replaceable>N</replaceable>は、<literal>declare</literal>命令で指 - 定されます。上の例の出力は次のようになります。 - <computeroutput>[tick i=1] -[tick i=2] - </computeroutput> + </example> + この例では、'declare'ブロックのコード中で2個の低レベル + 命令が実行されるごとにその時間を記録してプロファイルを + 行っています。この情報はコードのあるセクションの中で + 遅い箇所を探すのに使用できます。この処理は他の手法でも + 使用できます。ticksを使用することで実装が簡単になる + 場合が多々あるのです。 </para> <simpara> - ticks は、PHPでバックグラウンドIOやその他の多くの処理といった、簡 - 単なマルチタスク処理を実装する際に便利です。 + +ticksはデバッグ、単純なマルチタスク処理、バックグラウンドI/Oや + その他多くの処理を実装するのに便利です。 </simpara> <simpara> - <function>register_tick_function</function> および - <function>unregister_tick_function</function>も参照下さい。 + <function>register_tick_function</function>と + <function>unregister_tick_function</function>も参照してください。 </simpara> + </sect2> </sect1> <sect1 id="function.require"> @@ -872,7 +988,9 @@ これを行うには、<literal>include</literal>文を使用して下さい。 <informalexample> <programlisting role="php"> -require ('header.inc'); +<![CDATA[ +require ('header.php'); +]]> </programlisting> </informalexample> </para> @@ -897,25 +1015,27 @@ ルスクリプトに読み込まれます。 <informalexample> <programlisting role="php"> +<![CDATA[ /* この例は、someserverで .php を処理するように設定されており、.txt に * ついては設定されていないことを仮定しています。また、ここでの'動作す * る'という意味は、変数 $varoneと$vartwoがrequire()で読み込まれたファ * イルで利用であることを意味します。*/ /* 動作しない; file.txt は、someserverで処理されない。 */ -require ("http://someserver/file.txt?varone=1&vartwo=2"); +require ("http://someserver/file.txt?varone=1&vartwo=2"); -/* 動作しない; ローカルファイルシステムの'file.php?varone=1&vartwo=2' +/* 動作しない; +ローカルファイルシステムの'file.php?varone=1&vartwo=2' * という名前のファイルを探す。 */ -require ("file.php?varone=1&vartwo=2"); +require ("file.php?varone=1&vartwo=2"); /* 動作する。 */ -require ("http://someserver/file.php?varone=1&vartwo=2"); +require ("http://someserver/file.php?varone=1&vartwo=2"); $varone = 1; $vartwo = 2; require ("file.txt"); /* 動作する。 */ require ("file.php"); /* 動作する。 */ +]]> </programlisting> </informalexample> </para> @@ -962,10 +1082,12 @@ <literal>include</literal>を使用することができます。 <informalexample> <programlisting role="php"> -$files = array ('first.inc', 'second.inc', 'third.inc'); -for ($i = 0; $i < count($files); $i++) { +<![CDATA[ +$files = array ('first.php', 'second.php', 'third.php'); +for ($i = 0; $i < count($files); $i++) { include $files[$i]; } +]]> </programlisting> </informalexample> </para> @@ -982,6 +1104,7 @@ にある時には、命令ブロックとして括っておく必要があります。 <informalexample> <programlisting role="php"> +<![CDATA[ /* 以下は誤っており、希望通りに動作しません。 */ if ($condition) @@ -996,6 +1119,7 @@ } else { include($other); } +]]> </programlisting> </informalexample> </para> @@ -1015,26 +1139,30 @@ <example> <title>PHP 3とPHP 4における<function>include</function></title> <para> - メインファイルと同じディレクトリに(<filename>test.inc</filename> + メインファイルと同じディレクトリに(<filename>test.php</filename> という名前の)以下のファイルが存在すると仮定します。 <programlisting role="php"> -<?php -echo "Before the return <br>\n"; +<![CDATA[ +<?php +echo "Before the return <br>\n"; if (1) { return 27; } -echo "After the return <br>\n"; -?> +echo "After the return <br>\n"; +?> +]]> </programlisting> </para> <para> メインファイル(<filename>main.html</filename>)に以下の文が含まれている 仮定します。 <programlisting role="php"> -<?php -$retval = include ('test.inc'); -echo "File returned: '$retval'<br>\n"; -?> +<![CDATA[ +<?php +$retval = include ('test.php'); +echo "File returned: '$retval'<br>\n"; +?> +]]> </programlisting> </para> <para> @@ -1051,10 +1179,12 @@ ここで、<filename>main.html</filename>を以下のように変えたと 仮定しましょう。 <programlisting role="php"> -<?php -include ('test.inc'); -echo "Back in main.html<br>\n"; -?> +<![CDATA[ +<?php +include ('test.php'); +echo "Back in main.html<br>\n"; +?> +]]> </programlisting> </para> <para> @@ -1072,7 +1202,7 @@ </screen> </para> <para> - 上のパースエラーは、<filename>test.inc</filename>内で + 上のパースエラーは、<filename>test.php</filename>内で <literal>return</literal>文が関数以外のブロックで括られている ためです。returnをブロックの外に移動すると、出力は次のようになります。 <screen> @@ -1106,6 +1236,7 @@ ルスクリプトに読み込まれます。 <informalexample> <programlisting role="php"> +<![CDATA[ /* この例は、someserverで .php を処理するように設定されており、.txt に * ついては設定されていないことを仮定しています。また、ここでの'動作す * る'という意味は、変数 $varoneと$vartwoがinclude()で読み込まれたファ @@ -1114,17 +1245,18 @@ /* 動作せず; file.txt は someserverで処理されない。 */ include ("http://someserver/file.txt?varone=1&vartwo=2"); -/* 動作せず; ローカルファイルシステムの'file.php?varone=1&vartwo=2' +/* 動作せず; ローカルファイルシステムの'file.php?varone=1&vartwo=2' * という名前のファイルを探す。 */ -include ("file.php?varone=1&vartwo=2"); +include ("file.php?varone=1&vartwo=2"); /* 動作する。 */ -include ("http://someserver/file.php?varone=1&vartwo=2"); +include ("http://someserver/file.php?varone=1&vartwo=2"); $varone = 1; $vartwo = 2; include ("file.txt"); /* 動作する。 */ include ("file.php"); /* 動作する。 */ +]]> </programlisting> </informalexample> </para> @@ -1147,26 +1279,29 @@ は定義した関数の名前が壊されるのを回避します。 </para> <para> - 例えば、<literal>utils.inc</literal>と - <literal>foolib.inc</literal>という2つのファイルを作成するとしましょ + 例えば、<literal>utils.php</literal>と + +<literal>foolib.php</literal>という2つのファイルを作成するとしましょ う。 <example> - <title>utils.inc</title> + <title>utils.php</title> <programlisting role="php"> -<?php +<![CDATA[ +<?php define("PHPVERSION", floor(phpversion())); echo "GLOBALS ARE NICE\n"; function goodTea() { return "Oolong tea tastes good!"; } -?> +?> +]]> </programlisting> </example> <example> - <title>foolib.inc</title> + <title>foolib.php</title> <programlisting role="php"> -<?php -require ("utils.inc"); +<![CDATA[ +<?php +require ("utils.php"); function showVar($var) { if (PHPVERSION == 4) { print_r($var); @@ -1176,7 +1311,8 @@ } // 他の関数の定義 ... -?> +?> +]]> </programlisting> </example> そして、この後、スクリプト @@ -1184,30 +1320,34 @@ <example> <title>cause_error_require.php</title> <programlisting role="php"> -<?php -require("foolib.inc"); +<![CDATA[ +<?php +require("foolib.php"); /* 以下の処理は、エラーを発生します。 */ -require("utils.inc"); +require("utils.php"); $foo = array("1",array("complex","quaternion")); -echo "this is requiring utils.inc again which is also\n"; -echo "required in foolib.inc\n"; +echo "this is requiring utils.php again which is also\n"; +echo "required in foolib.php\n"; echo "Running goodTea: ".goodTea()."\n"; echo "Printing foo: \n"; showVar($foo); -?> +?> +]]> </programlisting> </example> 後の例を実行した場合、( PHP 4.01pl2を用いた)結果の出力は次のように なります。 <informalexample> - <programlisting> + <screen> +<![CDATA[ GLOBALS ARE NICE GLOBALS ARE NICE -Fatal error: Cannot redeclare goodTea() in utils.inc on line 5 - </programlisting> +Fatal error: Cannot redeclare goodTea() in utils.php on line 5 +]]> +</screen> </informalexample> - <literal>foolib.inc</literal>および + <literal>foolib.php</literal>および <literal>cause_errror_require.php</literal>を <function>require</function>の代わりに <function>require_once</function>を使用するように修正し、 @@ -1215,43 +1355,49 @@ <literal>avoid_error_require_once.php</literal>に変更すると 次のようになります。 <example> - <title>foolib.inc (fixed)</title> + <title>foolib.php (修正済み)</title> <programlisting role="php"> +<![CDATA[ ... -require_once("utils.inc"); +require_once("utils.php"); function showVar($var) { ... +]]> </programlisting> </example> <example> <title>avoid_error_require_once.php</title> <programlisting role="php"> +<![CDATA[ ... -require_once("foolib.inc"); -require_once("utils.inc"); +require_once("foolib.php"); +require_once("utils.php"); $foo = array("1",array("complex","quaternion")); ... +]]> </programlisting> </example> これを実行すると、(PHP 4.0.1pl2を用いた)出力は次のようになります。 <informalexample> - <programlisting> + <screen> +<![CDATA[ GLOBALS ARE NICE -this is requiring globals.inc again which is also -required in foolib.inc +this is requiring globals.php again which is also +required in foolib.php Running goodTea: Oolong tea tastes good! Printing foo: Array ( - [0] => 1 - [1] => Array + [0] => 1 + [1] => Array ( - [0] => complex - [1] => quaternion + [0] => complex + [1] => quaternion ) ) - </programlisting> +]]> + </screen> </informalexample> </para> <para>