いわゆるコールバック関数は、関数を呼び出すときに、標準変数をパラメータとして渡す代わりに、呼び出された関数に別の関数がパラメータとして渡されることを意味します。関数の形式説明に callback 型パラメーターが含まれている場合、その関数はコールバック関数です。前のセクションでは php 変数パラメーター関数 を紹介しましたが、このセクションでは php コールバック関数の学習に入ります。
コールバック関数の形式の説明は次のとおりです:
mixed funName (callback arg) //在参数列表中使用伪类型 callback 描述
callback は PHP の疑似型の一種でもあり、関数のパラメーターが別の関数を実際のパラメーターとして受け入れる必要があることを示します。非常に重要な疑問は、なぜ関数をパラメーターとして使用するのかということです。前に紹介したように、呼び出し元関数の実行動作はパラメーターを渡すことで変更できますが、関数に値を渡すだけの機能がまだ制限されている場合があります。ユーザー定義の実行プロセスを関数に渡して使用できれば、ユーザーによる関数の機能拡張が大幅に向上します。コールバック関数を宣言して使用する方法も重要な問題です。コールバック関数を宣言する必要がある場合は、まず変数関数を理解する必要があります。
変数関数
変数関数は、変数関数とも呼ばれます。変数名の後にかっこが続く場合、PHP は変数の値と同じ名前の関数を探し、その関数の実行を試みます。たとえば、関数 test() を宣言し、関数名文字列 test を変数 $demo に割り当てます。 $demo 変数を直接出力する場合、出力値は文字列 test でなければなりませんが、$demo 変数の後に括弧 $demo() を追加すると、$demo 変数値 test に対応する関数が呼び出されます。このようにして、同じ変数に異なる関数名を割り当てることができ、その変数を介して関数を呼び出すことができます。これは、オブジェクト指向におけるポリモーフィック機能の適用に似ています。
コード例は次のとおりです:
<?php function one($a,$b){ return $a + $b; } function two($a,$b){ return $a*$b; } function three($a,$b){ return $a/$b; } $result = "one"; //将函数名one赋值给变量$result,执行$result()时则调用函数one() //$result = "two"; //将函数名two赋值给变量$result,执行$result()时则调用函数two() //$result = "three"; //将函数名three赋值给变量$result,执行$result()时则调用函数three() echo "结果是:".$result(4,6); //变量$result接收到哪个函数名的值,就调用哪个函数 ?>
上記の例では、3 つの関数 one()、two()、three() が宣言されており、それぞれ 2 つの数値の合計、積、商を計算するために使用されます。 。そして、3 つの関数の関数名 (括弧なし) を文字列の形式で変数 $result に代入し、変数名 $result の後に 括弧を付けて 2 つの整数パラメーターを渡すと、次の関数が見つかります。変数 $result の値と同じ名前が実行されます。ほとんどの関数は、関数 name を変数に割り当てて、変数関数を形成できます。ただし、変数関数は言語構造では使用できません。
変数関数を使用してコールバック関数を宣言および適用する
コールバックできる関数をカスタマイズする場合は、変数関数を使用して実装を支援することを選択できます。コールバック関数を定義する場合、宣言されたパラメータが通常の変数である限り、関数の宣言構造は変わりません。ただし、このパラメータ変数を関数内で使用する場合、括弧を追加すると、パラメータ値と同じ名前の関数を呼び出すことができるため、渡されるパラメータは別の関数の名前文字列である必要があります。コールバック関数を使用する目的は、独自に定義した関数を関数に渡して使用することです。
コード例は次のとおりです:
<?php //声明回调函数filter, 在0-10的整数中通过自定义条件过滤不要的数字 function filter($fun){ for($i=0; $i<=10; $i++){ //将参数变量$fun加上一个圆括号$fun(),则为调用和变量$fun值同名的函数 if($fun($i)) continue; echo $i.'<br>'; } } //声明一个函数one,如果参数是3的倍数就返回ture,否则返回false function one($num){ return $num%3 == 0; } //声明一个函数two,如果参数是一个回文数返回ture,否则返回false function two($num){ return $num == strrev($num); } filter("one"); //打印出10以内非3的倍数,参数one是函数one()的名称字符串,是一个回调 echo "---------------------<br>"; filter("two"); //打印出10以内非回文数,参数two是函数two()的名称字符串,是一个回调 ?>
実行結果は次のとおりです:
上記の例では、宣言された関数 filter() がパラメータとして通常の値のみを受け入れる場合、ユーザーはフィルターで除外できます数値は比較的単純なものになります。この例では、定義された関数 filter() で、フィルター条件として渡された税金を含む値が呼び出されます。このようにして、この関数は、フィルターで不要な数値を除外できます。フィルター()関数。関数filter()内でパラメータ変数$funに括弧$fun()を追加することで、変数$funと同じ値を持つ関数をフィルタリング条件として呼び出すことができます。たとえば、この例では、2 つの関数 one() と two() が宣言されています。これらは、filter() を呼び出すときに関数名 one と two が文字列である限り、それぞれ 10 以内の 3 の倍数と回文をフィルタリングするために使用されます。これら 2 つの関数はパラメーターに渡され、内部使用のために filter() 関数に渡されます。
この章では、PHP コールバック関数の変数関数の定義、宣言、応用について説明します。次の章では、PHP コールバック関数の call_user_func_array() 関数とその使用法を紹介します。
【おすすめ関連チュートリアル】1.「php.cn Dugu Jiijian (4) - PHPビデオチュートリアル」
2.PHPプログラミングの入門からマスターまでの完全なビデオチュートリアルセット
以上がPHP関数のコールバック関数(1) 変数関数の定義、宣言、適用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。