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):
エコー "a は 5";
エコー "...";
elseif ($a == 6):
エコー "a は 6"; ";
else:
echo "a is not 5 or 6";
endif;
2> for ステートメント (頻繁にテストし、十分な理解も必要です)。 >形式: ({} の代わりに `:`...`endfor;` をサポート)
for (expr1; expr2; expr3)
ステートメント
実行プロセス:
最初の式 ( expr1) が評価されますループが開始される前に無条件で 1 回。
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)
ステートメント
説明:
フォーマットは、指定された 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");
reset($arr);
while (list(, $value) ) = each($arr)) {
echo "値: $value
n";
}
foreach ($arr as $value) {
echo "値: $value
; br />n";
}
5>Continue の違い (Continue はほとんど使用しません)
関数: このループ内の残りのコードと次の反復をスキップするためにループ構造で使用されます。条件が true と評価されると、ループが開始されます。
break と同様に、ループ コードの最後にジャンプするレベルの数を決定する数値も受け入れます。
注: continue; は continue 1; と同じで、このレイヤーのこのサイクルの最後にジャンプします。 continue 2 は、このループから外層の終わりまでジャンプします。
6> switch:break と同様の機能です (他の言語とは異なります)。
7>declare
構造体は、コードの実行命令を設定するために使用されます。declare の構文は他のフロー制御構造と似ています。
declare (ディレクティブ)
ステートメント
ディレクティブ部分では、declare コード セグメントの動作を設定できます。現在、認識されるコマンドは 1 つだけです:ticks (詳細については、以下の Ticks コマンドを参照してください)。
declare コードセグメントのステートメント部分が実行されます。その実行方法と実行中に発生する副作用は、ディレクティブで設定された命令によって異なります。
declare 構造はグローバル スコープでも使用でき、その後のすべてのコードに影響します。
主な例はトリック用です (現在はトリックのみ)。
例:
function profile($dump = FALSE)
{
static $profile; / プロファイルに保存されている時間を返し、削除します。
if ($dump) {
$temp = $profile;
return ($temp); }
$profile[] = microtime();
}
// 登録された関数プロファイルは、ティック関数
register_tick_function("profile");
// 初期化。
profile();
// 2 (ticks=2) の単純なステートメントが実行されると、関数 profile() が 1 回呼び出されます。 🎜> for ($x = 1; $x echo like_text(md5($x), md5($x*$x)), "
;" ;
}
}
// プロファイル格納領域(profile)に格納されているデータを表示
print_r(profile (TRUE));
register_tick_function( ) スレッド Web サーバー モジュールでは使用しないでください。Tick は ZTS モードでは機能せず、Web サーバーがクラッシュする可能性があります。何度も衝突してしまいました。押し下げられた。
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 回だけ実行されます