ホームページ >バックエンド開発 >PHPチュートリアル >PHP の基礎: 制御構造_PHP チュートリアル
PHP の制御構造のほとんどは、C や Java などの他の主流言語の制御構造と同じです。
ここでは、よく考慮されるいくつかの異なる詳細を示します:
1> フロー制御の代替構文 (パスカル スタイル)
主に if、while、for、foreach、switch ステートメントで使用されます。代替構文の基本的な形式は、左中括弧 ({) をコロン (:) に置き換え、右中括弧 (}) をそれぞれ endif;、endwhile;、endfor;、endforeach; に置き換えます。
例 (1):
if ($a == 5):
/*dosomething1*/
/*dosomething1*/
endif;
は以下と同等です:
if ($a == 5){
/*dosomething1 */
/*dosomething1*/
}
例 (2):
if ($a == 5):
echo "a == 5";
echo "..."; ):
echo "a = 6";
echo "!!!";
else:
endif;
2>for ステートメント (頻繁にテストして徹底的に理解してください)必要)
形式: ({} 形式の代わりに `:`...`endfor;` をサポート)
for (expr1; expr2; expr3)
ステートメント
実行プロセス:
最初の式 (expr1) はループ内にあります。開始する前に一度無条件で評価してください。
expr2 は各ループの前に評価されます。値が TRUE の場合、ループが続行され、ネストされたループ ステートメントが実行されます。値が FALSE の場合、ループは終了します。
expr3 は各ループの後に評価 (実行) されます。
同等の while ステートメントは次のとおりです:
expr1;
while(expr2):
endwhile;
3>
break の機能は、現在の for、foreach、while、do-while、または switch 構造の実行を終了することです。
同時に、break の後に数値を指定して、何レベルのループから抜け出すかを決定することができます。ブレーク 1 は、第 1 レベルのループから抜け出すことです。
C 言語に関する体系的な本を持っていないので、C にあるかどうかはわかりません。
4>foreach
形式:
a.foreach (array_expression as $value)
ステートメント
b.foreach (array_expression as $key => $value)
ステートメント
説明:
a 形式は、指定された array_expression 配列を走査します。ループを通過するたびに、現在のセルの値が $value に割り当てられ、配列内のポインターが 1 ステップ前に移動します (そのため、次のループで次のセルが取得されます)。
b 形式も同じことを行いますが、現在のユニットのキー名が各ループの変数 $key にも割り当てられる点が異なります。
注:
a. foreach の実行が開始されると、配列内のポインターは自動的に最初のユニットを指します。これは、foreach ループの前にreset()を呼び出す必要がないことを意味します。 /*reset(array &array): 配列の内部ポインタを配列 array の最初の要素に移動し、値を返します*/
b. 配列が参照されない限り、foreach は配列ではなく、指定された配列のコピーを操作します。自体。したがって、配列ポインタは each() 構造によって変更されず、返された配列単位を変更しても元の配列には影響しません。ただし、元の配列の内部ポインタは、配列の処理中に前方に移動します。 foreach ループが最後まで実行されると仮定すると、元の配列の内部ポインターは配列の末尾を指すことになります。
PHP 5 以降では、$value の前に & を追加することで配列のセルを簡単に変更できます。このメソッドは、値をコピーするのではなく、参照によって割り当てます。
例:
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr は array(2) になります、4、6、8)
c.foreach は、「@」を使用してエラー メッセージを抑制する機能をサポートしていません。
foreach の使用例:
$arr = array("one", "two", "three");
while (list(, $value) = each($arr); echo "Value: $value
n";
}
foreach ($arr as $value) {
echo "Value: $value
n";
5>差異を続けるほとんど使用されません)
機能: 条件が true と評価されたときに、このループ内の残りのコードをスキップし、次のループの実行を開始するためにループ構造で使用されます。
break と同様に、ループ コードの最後にジャンプするレベルの数を決定する数値も受け入れます。
注: continue; は continue 1; と同じで、どちらもこのレベルのこのループの最後にジャンプします。 continue 2 は、このループから外層の終わりまでジャンプします。
6>switch の continue の機能:break と似ています (他の言語とは異なります)。
7>declare
構造体は、コードの実行命令を設定するために使用されます。declare の構文は、他のフロー制御構造と似ています。
declare (ディレクティブ)
ステートメント
ディレクティブ部分では、declare コード セグメントの動作を設定できます。現在、認識されるコマンドは 1 つだけです:ticks (詳細については、以下の Ticks コマンドを参照してください)。
宣言コードセグメント内のステートメント部分が実行されます。どのように実行されるか、実行中にどのような副作用が発生するかは、ディレクティブに設定された命令によって異なります。
declare 構造はグローバル スコープでも使用でき、その後のすべてのコードに影響します。
主な例はトリック用です (現在はトリックのみ):
例:
function profile($dump = FALSE)
{
static $profile;
// profile に保存されている時間を返し、それを消去します
if ( $ dump) {
$ temp = $ Profile;
Return ($ TEMP);
$ Profile [] = Microtime ();
// 初期化。
profile();
// 2 (ticks=2) の単純なステートメントが実行されると、関数 profile() が 1 回呼び出されます。 ; $ x & lt; ++ $ x) {
echo like_text (md5 ($ x), md5 ($ x*$ x)), "& lt; br/>;"; area
print_r(profile (TRUE));
注:
register_tick_function() は ZTS モードでは動作しないため、マルチサーバーでは使用できません。 -処理モジュール (??理解できません??マルチ処理モジュールとは何ですか?)、そうでないとクラッシュします。何度も衝突してしまいました。押し下げられた。
8>require と include の違い
:
include() は警告を生成しますが、require() は致命的なエラーを引き起こします。つまり、ファイルが見つからない場合にページの処理を停止したい場合は、require() を使用します。 include() の場合はそうではなく、スクリプトは引き続き実行されます。また、適切な include_path が設定されていることを確認してください。 PHP 4.3.5 より前では、インクルード ファイル内の構文エラーによってプログラムが停止することはありませんでしたが、このバージョンからは停止することに注意してください。
類似点と使用法:
a. 変数スコープ: ファイルがインクルードされると、そのファイルに含まれるコードは、「include ステートメント」が配置されている行の変数スコープを継承します。その時点から、呼び出し側ファイルのその行で使用可能な変数は、呼び出されたファイルでも使用できるようになります。ただし、インクルード ファイルで定義されたすべての関数とクラスはグローバル スコープを持ちます。
「include ステートメント」が呼び出し元ファイルの関数内にある場合、呼び出されるファイルに含まれるすべてのコードは、関数内で定義されているかのように動作します。したがって、その関数の変数スコープに従います。
b. 解析モード
ファイルがインクルードされると、構文パーサーはターゲット ファイルの先頭で PHP モードを終了し、HTML モードに入り、ファイルの末尾で再開します。このため、PHP コードとして実行されるオブジェクト ファイル内のコードは、有効な PHP 開始タグと終了タグ内に含める必要があります。
c. 条件ステートメントの形式の問題
include() と require() は特殊な言語構造であるため、条件ステートメントで使用する場合はステートメント グループ (中括弧内) に配置する必要があります。
include() は特殊な言語構造であるため、そのパラメータには括弧は必要ありません。戻り値を比較するときは注意してください。
d. 戻り値の処理
インクルードされたファイル内で return() ステートメントを使用すると、ファイル内のプログラムの実行を終了し、それを呼び出したスクリプトに戻ることができます。インクルードされたファイルから値を返すことも可能です。 include呼び出しの戻り値は通常の関数と同様に取得できます。これは、リモート ファイルの出力に有効な PHP 開始タグと終了タグ (他のローカル ファイルと同様) がない限り、リモート ファイルをインクルードする場合には機能しません。タグ内で必要な変数を定義できます。これは、ファイルがインクルードされる場所の後で使用できるようになります。
例:
return.php
=============
$var = 'PHP'
return $var;
noreturn.php
========= = =====
$var = 'PHP'
testreturns.php
============================;
$ foo = include 'return.php';
echo $foo; // 'PHP' を出力します
$bar = include 'noreturn.php'; // 1 つの関数と変数の再定義を出力します。質問:
この現象を防ぐには、 include_once または require_once
f を使用できます。 その他:
PHP 4.0.2 より前では、次のルールが適用されます: require() は、対象ファイルが存在する行であっても常に読み取りを試みます。全く存在しない場合は実行されません。条件文は require() には影響しません。ただし、require() が配置されている行が実行されない場合、ターゲット ファイル内のコードは実行されません。同様に、ループ構造は require() の動作に影響を与えません。ターゲット ファイルに含まれるコードは依然としてループの本体ですが、require() 自体は 1 回だけ実行されます