ホームページ  >  記事  >  バックエンド開発  >  コードを甘くする PHP の珍しい使い方のまとめ (2) - PHP の「callback」コールバック

コードを甘くする PHP の珍しい使い方のまとめ (2) - PHP の「callback」コールバック

WBOY
WBOYオリジナル
2016-06-13 13:08:482555ブラウズ

コードを甘くする PHP の特殊な使用法の概要 (2) -- PHP の「callback」コールバック
この章では、PHP における「コールバック」の実際的な使用法をいくつかまとめます。

1. コールバックとは何ですか?
まず、一般に「コールバック」として知られる「コールバック」について簡単に説明します。これは、実行可能コードを別の関数のパラメータとして渡す動作であり、ほとんどすべての言語で異なる実装方法があります。すべての主流言語がこの機能をサポートしています。コールバックを実装するには主に 2 つの方法があると要約します。
1. 主に C++ や C# などの静的言語でコールバックを実装します。 Ruby、JavaScript などを使用します。動的言語は主にラムダ式 (匿名関数とも呼ばれます) を通じてコールバックを実装します
「コールバック」の詳細な定義については、Wikipedia を参照してください: http://en.wikipedia.org/ wiki/Callback_(computer_programming),

2. PHP の複雑なコールバック
コールバックと言えば、多くの人はすぐに PHP 5.3 のラムダ関数の実装を思い出すでしょう。これは実際、最も便利で目を引く方法です。コールバックを実装する機会があれば、ぜひ PHP 5.3 を使用してください。ただし、PHP 5.3 を使用できないアプリケーションや、以前のバージョンとの互換性が必要なアプリケーションのために、実際には PHP には他にも多くのコールバック実装があります。以下で 1 つずつ見ていきましょう。

  • PHP は を実装するための関数ポインターをサポートしています。実装規則は次のとおりです: 関数を渡す場合は、関数名を文字列の形式でパラメーターに渡します
  • オブジェクトメソッドを渡す場合は、配列をパラメータに渡します。オブジェクトはインデックス=0に配置され、メソッド名の文字列はインデックス=1に配置されます
    クラスの静的メソッドを渡す場合は、渡しますパラメータへの配列。index=0 の位置にクラス名の文字列を配置し、index=1 の位置にメソッド名の文字列を配置します。


  • PHP は関数 create_function の使用をサポートしています匿名関数を作成するには これは PHP 5.3 より前のバージョン用です。匿名関数を作成する唯一の方法、プロトタイプは次のとおりです:

  • string create_function ( string $args , string $code )
    
    ただし、この関数ではパラメータ リスト関数の実装は文字列内に配置されます。エディターでは構文の強調表示ができず、コード内の文字をエスケープする必要があるため、PHP での匿名関数の使用は制限されます。


  • は、前述のラムダ関数 の使用法です (PHP 5.3 以降でのみサポートされています) 言語におけるクロージャーとラムダ関数の人気に伴い、PHP にもはラムダ関数をサポートしており、その構文は JavaScript の匿名関数に基づいてモデル化されています。ただし、Ruby や JavaScript のクロージャとは異なり、use を使用して変数が明示的に導入されない限り、クロージャの外側の変数にアクセスできません。

  • PHP 標準ライブラリでは、array_map や usort などの関数がコールバック パラメータの受け渡しをサポートしており、上記のメソッドのいずれかをパラメータとして使用できます。これで十分です。ユーザーがコールバック パラメーターを渡すことができる関数を実装したいですか?もちろん問題はありません。関数の実装を示すコールバックパラメータがあります。

    3. 関数内でコールバックを呼び出す方法。 🎜> はい、コールバック パラメーターを構築する方法は上で説明しましたが、関数内でこのパラメーターを実行するにはどうすればよいですか?最も簡単に考えられる方法は、
    で文字列変数を直接使用して関数
    を実行することです。次に例を示します。
    この方法は直感的でシンプルです。ただし、このメソッドはすべてのコールバック パラメータに対して有効ではありません。
    $a='FunctionName';
    $a();
    
    すべてのコールバック パラメータと互換性を持たせたい場合は、次の関数を使用できます:

    call_user_func および call_user_func_array
    これら 2 つの関数の目的は同じです。違いは、call_user_func_array 関数によってコールバック関数に渡されるパラメーターが配列に配置されている必要があることです。どちらを使用するかは個人的な好みによって決まります。文字数が減り、パラメータがより柔軟になります。関数のプロトタイプは次のとおりです。

    関数の耐障害性を向上させるために、
    mixed call_user_func ( callback $function [, mixed $parameter [, mixed $... ]] )
    mixed call_user_func_array ( callback $function , array $param_arr )
    
    を呼び出す前にパラメーターを呼び出すことができるかどうかを判断する必要があります。次の関数を使用できます:

    is_callable
    関数のプロトタイプは次のとおりです:

    bool is_callable ( callback $name [, bool $syntax_only= false [, string &$callable_name ]] )
    
    これは、 PHPのコールバック。私のWeiboアドレス: http://weibo.com/jameren、皆さんも私をフォローしてください、

    ところで宣伝をさせてください: コードを甘くする PHP の珍しい使い方のまとめ (2) - PHP の「callback」コールバック
    引用
    私は最近、大容量の 15G 無料ネットワーク U ディスクを使用しました - @ Cool Disk で使用できます。 PC と携帯電話、ファイルの種類とサイズの制限なし、高速転送速度、ファイルが失われることはありません、ぜひ一緒に体験してください。以下の招待リンクから登録すると、あなたも私も 256 MB の追加のディスク容量を獲得できます。 http://t.cn/aNLZje


    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。