+-----phpstar------------------------------------------ -+
+---最も完全で最良の PHP 学習ノートを提供します --+
+----ノートを読むとPHPがよく学べます---------+
+------------------------------------------------ ----+
変数関数
可変変数と同様に、関数の名前も可変です。これは、関数の関数名も変数に置き換えることができることを意味します。
可変変数を使用して計算機を完成させます
匿名関数:
匿名関数とは、関数名のない関数を指します。したがって、この関数は通常の関数のように呼び出すことはできません。通常、これは自動的に呼び出される関数のパラメータとして使用されます。コールバックデータの疑似型。
例: マップ配列操作:
この匿名関数を直接呼び出す方法はないため、常に関数のパラメーターとして使用されます。
匿名関数の役割:
通常の関数を使用してから定義することができます。関数の宣言はスクリプトの実行中ではなく、スクリプトのコンパイル中に決定されるためです。そして、実行前にコンパイルが行われます。
対照的に、匿名関数は実行時に決定されます。
さらに、通常の関数を宣言すると、スクリプトの終了前にその関数を呼び出すことができます。
対照的に、無名関数が実行された後、関数空間はすぐに解放されます。匿名関数は 1 回のみ実行できます。
関数が 1 回だけ使用される場合、匿名関数はリソースを節約します。
ただし、匿名関数は PHP の特徴です。
Php5.3 でのみ利用可能な匿名関数。
匿名関数がない場合、コールバック形式のパラメータを必要とする呼び出しはどのように処理されるべきでしょうか?コールバック パラメーターは関数名に置き換える必要があり、対応する関数が存在する必要があります。
ヒント: PHP の匿名関数はクロージャー関数とも呼ばれます。
関数の再帰呼び出し:
関数はどこからでも呼び出すことができます。関数の関数本体内であっても、現在の関数を呼び出すことができます。
関数がそれ自体を呼び出す場合、それは関数の再帰呼び出しと呼ばれます。
最も極端な例:
関数を再帰的に呼び出すと、再帰的なアイデアに従って考えられる生活上のいくつかの問題を解決できます。
階乗を求める
5! = 5 * 4 * 3 * 2 * 1;
4! = 4 * 3 * 2 * 1
3! = 3 * 2 * 1;
1! = 1;
5! = 5 * 4!;
4! = 4 * 3!;
ここで、n の階乗を求める関数を定義するとします。
Jiecheng(n); n n * jiecheng(n-1)
の階乗を返します。Jiecheng(5) = 5 *jiecheng(4)
;
プログラミング設計を完了するために再帰的思考を使用する必要がある場合、2 つの主な問題を考慮する必要がありますか?
1 再帰点?なぜこの問題が再帰を使用して解決できるのか。
2 再帰的に終了しますか?関数が制限なしでそれ自体を呼び出す場合、その関数は間違いなく制限なしで実行し続けます (死ぬ)。再帰呼び出しが終了する前にどのような条件に達するかを必ず調べてください。この条件が再帰点です。
たとえば階乗:
再帰点: jiecheng(n) = n * jiecheng(n-1)。 n の階乗を求める解は n-1 の階乗と同じであるため、関数で完了できます。
終了: 1 の階乗を見つける必要がある場合、1 の階乗は既知であるため、それを見つけるために自分自身を呼び出し続ける必要はありません。
関数が呼び出されるたびに、関数スタック領域に関数実行スペースが形成されます:
スタック: メモリの記憶領域。彼の操作特性: 後入れ先出し (先入れ後出し)
注: 再帰的に呼び出される各関数はメモリ空間を開きます。つまり、各呼び出しには個別のスコープがあるため、ローカル変数は共有されません。通常、問題を解決するには静的な静的ローカル変数を使用します。
フィボナッチ数列:
最初の 2 つの項目は既知であり (通常は 1, 1)、3 番目の項目から始まり、各項目は前の 2 つの項目の合計です:
1 1 2 3 5 8 13
フィボナッチ数列の n 項の値を見つける関数を作成します
Fbnq(4) == 3
Fbnq(7) == 13
Fbnq(n) = fbnq(n-1) + fbnq(n-2);
再帰ポイント:
再帰的終了: 最初の 2 つの項目は既知です
システム関数とその関数に関する関連情報。
Function_exists('関数名'); 関数が定義されており、すでに存在しているかどうかを判断します。戻り値はブール型
Func_get_args(); 現在の関数のすべてのパラメータの値を取得します。これは関数内で呼び出す必要があり、取得するのは関数の定義時の仮パラメータではなく、関数の呼び出し時に渡されるパラメータです。
注:
関数が呼び出されるとき、実パラメータの数は仮パラメータの数以上である必要があります。それ以上ではなく、それ以下ではありません。
実パラメータの数が仮パラメータの数を超えた場合、関数内で実パラメータの値を取得するにはどうすればよいでしょうか?すべての実引数は、関数内で func_get_args() 関数を使用して取得できます。実パラメータは、渡された位置に従って順に func_get_args() の戻り結果に格納されます。
例:
すべての引数を合計する関数を作成します。要件は、パラメーターの数が固定されていないことです。
sumAll(); 0
合計(10); 10
sumAll(10, 20);
sumAll(10, 20, 30) 60
手順は次のとおりです。
Func_get_arg(int index) パラメータの関数を取得します。パラメータ int は数値を表します。インデックス位置は 0 から始まります。
Func_num_args は実パラメータの数を取得します。
関数では、マジック定数 __FUNCTION__ を使用して、現在の関数名を置き換えることができます。
一般的な使用法: この値を再帰で使用すると、関数名が変更されたときに、関数本体を変更せずに操作を完了できるようになります。