第 4 章 プログラム制御
この章では、PHP の詳細を説明し、関数、式、ステートメントを使用してプログラムを制御する方法を説明します。
前の章では、最初にデータの操作方法を紹介しました。オペランドと演算子を構成要素とみなすと、それらを組み合わせて式を形成できます。さらに、式を使用してステートメントを形成したり、ステートメントを使用して関数を形成したり、関数を使用してプログラムを形成したりすることができます。
ヒント: プログラミング言語の基本要素を学習するときは、グローバルな観点から -- を理解してください。つまり、これらの要素が完全なプログラム -- を構成する方法を理解することは非常に難しい場合があります。しかし、心配しないで、楽観的になりましょう。次の章では、プログラム全体を段階的に示し、プログラムがどのように構築されるかを段階的に説明します。
4.1 式
オペランドと演算子を組み合わせると、式が形成されます。本書全体を通じて多くの表現が例に示されてきましたが、それらに焦点を当て始めたのは今だけです。
式は 1 つ以上の演算子で接続されたオペランドであり、値の計算に使用されます --スカラーまたは配列。
最も基本的な式は数値です:
12
この謙虚な始まりから、ますます複雑な式について説明します:
-12
-12 + 14
-12 + 14 * (24/12)
(24/12))&& 計算合計コスト() 各式は、複雑さに関係なく、実際にはより小さな式と 1 つ以上のオペランドで構成されていることに注意してください。コンピュータープログラマが、定義される概念を使用してその概念を定義することを再帰と呼びます。再帰が完了すると、コンピュータが各部分を完全に実行できるようになるまで、式をより単純な部分に分割できます。
4.1.1 単純な式
単純な式は、単一の代入演算子で構成されます。または、次のもので構成されます。単一の関数呼び出し。これらの表現は簡単なので詳しく説明する必要はありません。以下にいくつかの例を示します。
*Initialize_pricing_rules() -- は関数を呼び出します。
* $str_first_name = 'John' -- 初期化スカラー。
* $arr_first_names = array('John', 'Marie') -- 配列を初期化します。
4.1.2副作用のある単純な式
式は主要なタスクの 1 つです、他の副作用もあります。この副作用は、1 つ以上の変数の値が変更され、これらの変更が代入演算子の結果ではない場合に発生します。たとえば、関数呼び出しでグローバル変数 (グローバル変数とは、関数内の global キーワードを使用して指定された変数) を設定したり、プラス演算子で変数の値を変更したりできます。変数。 。副作用によってプログラムが読みにくくなる可能性があるため、プログラミングの目標の 1 つは副作用をできる限り最小限に抑えることです。
グローバル キーワードを使用しないことは、副作用を避けるための良い選択です。
副作用のある次の式の例を見てみましょう:
* $int_total_glasses = ++$int_number_of_glasses
-- $int_number_glasses 変数に 1 を追加した後、その値を $int_total_glasses に代入します。
* function one() {global $str_direction_name; $str_directory_name = '/dos_data'; }
-- When 🎜>関数が呼び出された後、グローバル変数の値が変更されます。
4.1.3
複雑な式
複雑な式は、任意の数の要素を任意の順序で使用できます。 、変数、演算子、関数。
可能な限り短い式を使用してください。つまり、保守が容易です。
いくつかの例を示します:
* ((10+2) /count_fishes() * 114)
- - には、3 つの演算子と関数呼び出しを含む複雑な式が含まれています。
*initialize_count( 20 -($int_page_number -1) * 2)
-- 複雑な式パラメーターを使用した単純な関数呼び出し。
ヒント: 左右の括弧の数が同じかどうかを見分けるのが難しい場合があります。左から右に、左括弧が表示される場合は合計から 1 を追加し、右括弧が表示される場合は合計から 1 を減算します。式の終わりの合計数が 0 の場合、左かっこの数と右かっこの数は同じでなければなりません。
4.2 ステートメント
すべてのPHP プログラム単純なステートメントか複雑なステートメントかに関係なく、ステートメントで構成されます。これらのステートメントは順番に実行され、プログラムの終わり、ジャンプ ステートメント、または分岐ステートメントに到達するまで各文が実行されます。
最も基本的なステートメントは次のとおりです:
;
このステートメントは何も行いませんまだ完了していませんが、それでも合法です。セミコロンはステートメントの終わりを示します。必要に応じて、ステートメントは非常に複雑になることがあります。例:
$str_house_size =(
$int_number_of_rooms > 9 ?
"大" :
"小"
); 🎜 >
このコード行は "large" を割り当てます。それ以外の場合は $str_house_size が与えられます 「小さい」。 人間の言語のステートメントと同じように、PHP ステートメントはいくつかのコンポーネントに分割できます。 PHP では、コンポーネントは値、変数、関数、キーワードになります。キーワードは、PHP という単語であり、個人使用のために予約されています。これらのキーワード (_FILE_、_LINE_、if、else、elseif、while、do、for、break、 continue、switch、case、default、require、include、function) は、 PHP 言語を構成し、それらを使用してプログラムのフローを制御するために不可欠です。
この本ではキーワード _FILE_ と _LINE_ は紹介しません。関連コンテンツについては、PHP ドキュメントを参照してください。キーワード require および include は、PHP スクリプトの読み取りと実行に使用されます。 , については、PHP マニュアルに詳しく説明されています。次のセクションでは、残りのキーワードに焦点を当てます。
4.2.1 ステートメントタイプ
PHP には合計 6 があります表 4.1 に示すように、 タイプのステートメント。
テーブル4.1 PHPデータ型
文の種類
説明
非実行文
計算は必要ですが、アクションの実行は必要ありません。
ステートメントを実行
アクションを実行します。
代入ステートメント
変数に値を代入します。
判定文
状態を判断し、実行するアクションを決定します。
ループ ステートメント
特定の条件が true になるまで、または特定の条件が満たされるまで、一連のステートメントを繰り返し実行します。間違い。
ジャンプ文
プログラムフローをプログラム内の別の行に無条件に変更して実行を継続します。
実行不可能なステートメント:
いわゆる実行不可能なステートメントは です。 PHP 計算は必要ですが、アクションを実行する必要のないステートメント。例: ステートメント 10 + 20、その値は 30 ですが、変数値が変更されていないため、何か行動を起こす必要がある。結果の値は保持されず、次のステートメントが来るとすぐに破棄されます。
アクションは必要ありません。では、実行不可能なステートメントはどのように使用されるのでしょうか?わかりませんが、使用法を見つけたらぜひ教えてください。
実行ステートメント:
実行ステートメントは、式を通じて特定のアクションを実行します。変数の値を増減したり、関数を呼び出したりできます。実行ステートメントは、PHP で最も一般的に使用されるステートメント タイプです。
代入ステートメント:
代入ステートメントは変数に値を代入できます。代入演算子については、前の章 「PHP でのデータ処理 」 ですでに説明しましたので、説明しません。ここでは詳しく説明しません。
判決文:
判定ステートメントは、if および switch キーワードを使用して、計算に基づいて特定の関数の実行を決定します。式の結果、または式の結果に基づいて実行できる 2 つのステートメント行の 1 つ。たとえば、処理する小切手の値が 1000USD より大きい場合、小切手番号が 1000USD、別のプログラムを実行します。 if
キーワード
が if ステートメントに渡されます式を計算して真または偽の値を取得し、得られた真または偽の値に基づいて実行するプログラムを決定します。
最も一般的なのは、次の 3 種類の if ステートメントです。 1.
if ( EXPRESSION ) {
//
// 式が true の場合に実行されるコード ブロック。
}
2.
if ( EXPRESSION ) {
//
// 式が true の場合に実行されるコード ブロック
}
else {
//
// 式が false の場合に実行されるコード ブロック。 > 3.
if ( EXPRESSION_1 ) {
//
//expression_1 が true の場合に実行されるコード ブロック。
}
elseif ( EXPRESSION_2 ) {
// コード ブロック
// 式_2 が true の場合に実行されます。
}
else {
//
// すべての式が false の場合に実行されるコードブロックです。
式には、第 3 章
「PHP でのデータ処理
」のいずれかを含めることができます。代入演算子によって代入された値が判断する必要がある値である可能性があるため、代入演算子を使用してください。上記の最後の例は少し理解しにくいかもしれません。次に、別の例を見てみましょう。 echo " a = $int_a
; これらのコードは a = 5
を表示します。if ステートメントは、式 $int_a -= 5 を として処理します。 $int_a の値は、まず 5 だけ減算され、その結果の値が $int_a に代入されます。結果の値が true (つまり、ゼロではない) の場合、echo ステートメントが実行されます。
この例では、実行する必要があるステートメントが 1 つだけの場合、ステートメント セグメントの外側の中括弧はオプションであることを説明するだけでなく、代入演算子 if ステートメントで使用できます。
ヒント: 中括弧は、単一のステートメントに必要ない場合でも通常使用されます。これにより、将来ステートメントを追加しやすくなります。また、将来ステートメントを追加するときに中括弧の追加を忘れる可能性 (微妙な論理エラーが発生する可能性があります) も軽減されます。
次のコードは、else キーワードがどのように使用されるかを示しています。 > $int_a = 5; if ($int_a -= 5) {
echo "a = $int_a
"
}
echo " aはゼロです。
";
}
これらのコードには 🎜> elseif
キーワードが次のように使用されます: $str_name = 'ジョン';
if ($str_name == 'ジョー') {
echo "予定は月曜日です。
}
elseif ($str_name == 'John') { echo "あなたの約束は水曜日です。
"; } else { echo "あなたの約束は金曜日です。< ;br>";
}
次のコードが表示されます:
予定は水曜日です。
変数 $str_name が 'Joe' ではなく、 でもない場合'John '、if ステートメントの else サブステートメントが実行されます。それ以外の場合は、他の 2 つのサブステートメントが実行されます。のいずれかが実行されます。 else ステートメント ブロックにエラー メッセージを配置して不明な値を表示すると、else キーワードは不明な値や予期しない値を検出するのに役立ちます。の値も非常に便利です。例: if ($str_input == 'A') {
// A ステートメントを実行します。
}
elseif ($str_input == '8) ' ) {
// do B ステートメント。
}
else {
echo "認識できない入力エラー: '$str_input' が不明です。
}
これまでに示した例では、if ステートメントのすべての句で同じ変数が使用されています。ただし、次の例は架空の家とスマート コンピューターを示しているため、創造性を発揮することはできます。 if ($int_outside_degree close_window('left'); } }
elseif ($int_right_window_open == 1) {
$bln_mail_exists = look_outside_check_mailbox( );
if ($bln_mail_exists) {
make_payment("メールはここにあります。');
}
}
else {
$ str_window_side = select_side_of_house();
open_window($str_window_side);
}
switch
keyword
if 複数の条件値が必要な場合テストと判定を同時に行うと、if ステートメントは、
がすべて存在するため、-- の処理がさらに面倒になります。 >elseif ステートメントは 1 回実行する必要があります。この場合、多くの人は switch ステートメントを使用する方が簡単で速いと思われます。 🎜> switch ステートメントの構文構造は次のとおりです switch ( VARIABLE ) { case VALUE1: Break; VALUE2:
ブレーク; ケース VALUEn: ブレーク; デフォルト: ブレーク;switch ステートメントでは、チェックする必要がある各値が、対応する case ステートメントに対応します。チェックされる変数には、任意のスカラー値を指定できます (つまり、数値と文字列の両方をチェックできます)。
case ステートメントに break キーワードがない場合、この case ステートメントがまだ残っている場合、PHP は次の case ステートメントを実行します。 break ステートメントが存在しない場合は、次の case ステートメントを実行し、break が見つかるまで同様に実行します。 キーワードまで。
次に、switch ステートメントを使用してコマンド ライン プログラムを処理する簡単ですが完全な例を示します。ユーザーがコマンドを入力するたびに、switch ステートメントが呼び出され、実行するタスクが決定されます。もちろん、PHP は、Web ブラウザ プログラムの作成によく使用されますが、PHP。
switch ($str_input) {
// print ケースと echo ケースは同じタスクを実行するため、
// print ケースには Break キーワードは必要ありません。 case 'print':
case 'echo':
// エコータスクを実行します。
Break;
case 'check_balance':
// バランスチェックタスクを実行します。 Break;
case 1:
case 2:
// $str_input を何かに追加します。
Break;
デフォルト:
echo "認識できないコマンドを入力したか、";
echo "1 または 2 以外の数値を追加しようとしています。";
Break
}
分岐ステートメントの使用には次のような制限があります。判断するための 1 つの変数として使用されます。別の観点から見ると、この制限こそが、
switch ステートメントが if ステートメントよりも理解しやすい理由です。 ループ ステートメント:
ループ ステートメントは、指定された式の値が true または false になるまで、プログラムの必要に応じてプログラムを繰り返し実行します。
PHP には、プログラムのループを制御する 3 つのキーワードがあります。for、while と do であり、これら 3 つのキーワードによって処理されるループ ステートメントは少し異なります。ただし、どちらの場合も、ループをいつ停止するかを決定するために式の値が使用されます。キーワード for を使用するループ ステートメントは最も複雑です。最初に見てみましょう。
forキーワード:
構文構造の観点から、forステートメントは 3 つの式と 1 つのステートメントで構成されます。形式は次のとおりです:
for (INITIALIZATION; CONDITION; OPERATION) {
// ステートメント ブロック
}
ループ ステートメント内 始める前に、まず式を初期化する必要があります。このときの初期化はどの変数にも適用されますが、ほとんどのプログラマはループ文のセクションで使用する変数のみを初期化します。初期化作業は for ステートメントの前に実行できます。式の初期化作業が for ステートメント内で実行される理由。自己完成プログラムの生成を支援することです。
ヒント: 初期化式は通常、代入式です。代入を初期化するときは、等価演算子 (==) と代入演算子 (=) を混同しないように注意してください。そうしないと、プログラムに隠れた問題が残ることになります。例: $iindex == 0 は誤りです。正しい式は $iindex = 0 である必要があります。
条件式は、ループ部分の実行を継続するかループを停止するかを制御するために使用されます。条件式が false (つまり、ゼロ) と評価されると、ループは終了します。
ループ変数は、ループの終了時期を制御する条件式で使用される変数です。
算術式は、ループ内のコード セグメントが実行されるたびに、条件式で使用される変数 (つまり、ループ変数) の値を何らかの方法で変更するために使用されます。
for ステートメントを使用する最も基本的な方法は、ゼロから特定の値までを計算することです。例:
for ($loop_variable = 0;
$loop_variable $loop_variable++) {
echo "ループ内:loop_variable = $loop_variable< ; br>";
}
このステートメントは 0 から 99 の数:
ループ内: ループ変数 = 0
ループ内: ループ変数 = 1
...
ループ内: ループ変数 = 98
ループ内:loop_variable = 99
ループ ステートメントが終了すると、変数 $loop_variable の値は になります。 100 ですが、この値は表示されなくなりました。これは、99 を出力した後、式に 1 が追加され、取得された変数値が 100。このとき、条件式の値は偽と判定され、ループが終了します。
注: 算術式 (またはステートメント セグメント内のコード) でループ変数の値を変更するか、この後半で使用する必要があることが重要です。 break の章で言及されています。そうしないと、ループ ステートメントが終了せず、無限ループになります。 for
ループ ステートメントでは、次の式をデクリメントすることでループ変数の値を減らすこともできます。 for ($loop_variable = 100;
$loop_variable < 🎜> $loop_variable --) {
echo "ループ内: ループ変数 = $loop_variable
"; >
このステートメントを実行すると、
100
から
1 までの数値が出力されます: ループ内: ループ変数 = 100 ループ内: ループ変数 = 99 ... ループ内: ループ変数 = 2 ループ内: ループ変数 = 1
初期化式では、カンマ区切りのメソッドを使用して複数の変数を初期化して割り当てることができます。次の例は、複数の変数を初期化する方法と、ループ ステートメントに別の変数を含める方法を示しています。 🎜>
for ($row = 0;$row <=2; $row++) {
for ($col_value = 0, $col = 0; $col <= 2; $col++) {
$col_value += $row + $col
echo "[$row,$col] = $ Col_value
";
}
}
表示される出力は次のとおりです:
[0,0] = 0
[0,1] = 1
[0,2] = 3
[1,0] = 0
...
[2,1] = 5
[ 2 ,2] = 9
内側のループが開始されるたびに、$col_calue はゼロに再初期化されます。
これまでは、ループ変数が 1 ずつ増加または減少する場合についてのみ説明してきました。ただし、算術式は非常に柔軟で、ループ変数の値を任意に変更でき、カンマで区切ることで複数の演算を同時に実行できます。例:
$int_number_of_items = 10;
// 次の for ループは、ループ ヘッダー内の各
// 式を個別の
に配置します。 // 可読性を高めるための行
For ($first_time = 1,$index =1;
$index $index += 2, $first_time = 0
) {
if ($first_time) {
echo "レポート ヘッダー
";
}
各 "レポート行 $index
";
}
if (! $first_time) {
echo "
レポート フッター
"
}
行コードの出力は以下のとおりです。
レポート行 1
レポート行 3
レポート行 4
レポート行 5
レポート行 9
レポート フッター
ループが繰り返されるたびに、ループ変数 ($index) が 2。さらに、変数 $first_time はレポートのヘッダーとフッターの出力を制御します。 変数 $int_number_of_items の初期値を 0 に変更すると、何も表示されません。初めて条件式の値を判定する場合、変数$indexの値は1、変数 $int_number_of_item の値は 0 であるため、文セグメントには入らず、演算式は実行されません。これにより、変数 $first_time の値は依然として 1 となり、ループの終了時にレポート フッターは表示されなくなります。出力される。
whileキーワード:
条件が true の場合、while ステートメントのブロックを繰り返すループ。 while ステートメントの実行時に条件が true でない場合、ステートメント ブロックは実行されません。
while ループの構文は次のとおりです
1。
while ( CONDITION ) {
// ステートメント ブロック。
}
2.
while ( CONDITION ) :
// ステートメント ブロック。 Endwhile;
次の例は、while ステートメントの使用がいかに簡単であるかを示しています。 iindex echo "while ステートメント内: $iindex
"; $iindex++; echo "while ステートメント外: $iindex
"; 🎜>
この例の結果が表示されます
while 文内: 0
while 文内: 1
while 文内: 2 while ステートメント内の : 3 while ステートメント内: 4 while ステートメントの外側: 5
while ステートメントが完了すると、$iindex の値は 5 - - 条件式 ($iindex < 5) で期待される 4 ではなく 。 $iindex が 4 の場合、条件式が true となり、ステートメント ブロックが実行され、その後 $ iindex の値は 5 に代入されます。このとき、条件文が再度実行され、式は false となり、文は終了します。
$iindex の値が 5 より大きい場合 (任意)数字を言います (8)。while ステートメントを実行すると、上記の例では while 文の外側: 8
do
キーワード:
式が false の場合、do はステートメント ブロックをループで実行します。このステートメントのテスト条件は、while ループの逆です。while ループは、式が true であるかどうかをテストします。条件式がステートメント ブロックの前にテストするのではなく、ステートメント ブロックの実行後にテストされることも、do ループと while の違いです。 ループ これは、ステートメント ブロックが少なくとも 1 回実行されることを意味します。 do
ループの構文は次のとおりです do {
// ステートメントブロック
} (条件 );
ほとんどすべてのループは、while ステートメントまたは do ステートメントで表すことができます。プログラムの論理構造をどのように表現したいか、またはどの方法が使いやすいかは関係ありません。場合によっては、ページ数が 20 未満の場合 do print_the_page を使用します。 🎜>の表現の方が分かりやすいです。
次の do ステートメントは、while を使用する以前の例です。この章では、の別のバージョンです。
$iindex = 0;
do {
echo "Do ステートメント内: $iindex
";
$iindex++; $iindex
;
echo "Outside Do ステートメント: $iindex
";
この例の結果が表示されます
Do ステートメント内部: 0
Do ステートメント内部: 1
Do ステートメント内部: 2
Do ステートメント内部: 3
Do ステートメント内部: 4
Do ステートメント外部: 5
象ながら