検索
ホームページバックエンド開発PHPチュートリアルコールバック関数の原理とPHPの例

コールバック関数の原理と PHP の例

背景: 最近の開発プロジェクトでは、ユーザーは長い間考えた結果、一連のクエリ アクティビティを開始する前に、まずサービスを呼び出す必要があります。同僚は、コールバック関数を使用するとこの問題を解決できると教えてくれました。ここでは、PHPにおけるコールバック関数の原理と実装について説明します。


1 コールバックとは

ソフトウェア モジュール間には常に一定の違いがあります インターフェイス呼び出し方法の観点から、同期呼び出し、コールバック、非同期呼び出しの 3 つのカテゴリに分類できます。同期呼び出しはブロッキング呼び出しであり、呼び出し元は相手が実行を完了するまで待機する必要があります。これは一方向呼び出しであり、呼び出し先も呼び出します。相手のインターフェースが呼び出されます。非同期呼び出しは、メッセージやイベントと同様のメカニズムですが、その呼び出し方向はまったく逆です。インターフェースのサービスが特定のメッセージを受信したり、イベントが発生したりすると、アクティブに通知されます。クライアント (つまり、クライアント インターフェイスを呼び出します)。コールバックと非同期呼び出しの関係は非常に密接です。通常、コールバックを使用して非同期メッセージを登録し、非同期呼び出しを通じてメッセージ通知を実装します。同期呼び出しは 3 つの中で最も単純であり、多くの場合、コールバックが非同期呼び出しの基礎となるため、以下ではさまざまなソフトウェア アーキテクチャでのコールバック メカニズムの実装に焦点を当てます。

さまざまな種類の言語 (構造化言語やオブジェクト言語など)、プラットフォーム (Win32、JDK)、またはアーキテクチャ (CORBA、DCOM、WebService) について、同期に加えて、クライアント間の対話特定の非同期通知メカニズムを使用すると、サービス プロバイダー (またはインターフェイス プロバイダー) が特定の状況下で顧客に積極的に通知できるようになり、コールバックは非同期実装を実現する最も簡単な方法です。一般的な構造化言語の場合、コールバックはコールバック関数を通じて実装できます。コールバック関数も関数またはプロシージャですが、呼び出し先が使用するために呼び出し元によって実装される特別な関数です。
オブジェクト指向言語では、コールバックはインターフェイスまたは抽象クラスを通じて実装され、このインターフェイスを実装するクラスをコールバック クラスと呼び、コールバック クラスのオブジェクトがコールバック オブジェクトになります。 C++ や Object Pascal などの手続き型機能と互換性のあるオブジェクト言語の場合、コールバック オブジェクト、コールバック メソッドなどの機能を提供するだけでなく、手続き型言語のコールバック関数機構とも互換性があります。 Windows プラットフォームのメッセージ メカニズムは、メッセージを受信して​​処理するという目的を達成するために、システムが提供するインターフェイスを介してメッセージ処理関数 (つまり、コールバック関数) を登録します。 Windows プラットフォームの API は C 言語で構築されているため、コールバック関数の特殊なケースと考えることができます。分散コンポーネント エージェント システム CORBA には、コールバック、イベント サービス、通知サービスなど、非同期処理のメソッドが多数あります。イベント サービスと通知サービスは、非同期メッセージを処理するために CORBA によって使用される標準サービスであり、主にメッセージの処理、配布、メンテナンスなどを担当します。単純な非同期処理の場合は、コールバック メカニズムを通じて実装できます。

2 PHP コールバック関数の実装方法


2.1 グローバル関数コールバック

ここでのグローバル関数とは、関数を使用して直接定義された関数を指します。オブジェクトやオブジェクトには含まれません。クラス。次の例を参照してください。
function fnCallBack( $msg1 , $msg2 )
{
echo 'msg1:'.$msg1 ;
echo "
n";
echo 'msg2:'.$msg2;

}


$fnName = "fnCallBack" //メソッド名
$params = array( 'hello' , 'world' );//パラメータに渡される値

call_user_func_array( $fnName , $params );

結果:


コードの説明:
ここでは、呼び出しを行うために PHP 組み込み関数 call_user_func_array が使用されます。 call_user_func_array には 2 つのパラメータがあります。最初のパラメータは呼び出される関数の名前を示す文字列で、2 番目のパラメータは呼び出される関数に順番に渡されるパラメータ リストを示します。

2.2 クラスの静的メソッドのコールバック
コールバックしたいメソッドがクラスの静的メソッドの場合、どうすればよいでしょうか? PHP の組み込み call_user_func_array メソッドを使用して呼び出しを行うこともできます。例を参照してください。
サンプル コード:
class MyClass
{
パブリック静的関数 fnCallBack( $msg1 , $msg2 )
{
echo 'msg1:'.$msg1;
echo "
n";
echo 'msg2:'.$msg2;
}
}


$className = 'MyClass'; //クラス名
$fnName = "fnCallBack"; class
$params = array( 'hello' , 'world' );//パラメータに渡される値
call_user_func_array( array( $className , $fnName ) , $ params );


結果:


コードの説明:
このコードは、最初のメソッドのコードと非常によく似ています。call_user_func_array の最初のパラメーターとしてクラス名 (MyClass) を渡してクラスを実装します。静的メソッドのコールバックがなくなりました。このとき、call_user_func_array の最初のパラメータは配列であることに注意してください。このメソッドを使用してクラスを呼び出すと、配列の最初の要素はクラス名、2 番目の要素は呼び出される関数名になります。非静的メソッド (つまり、静的メソッドを削除) の場合、結果はどうなりますか?次のコードを参照してください。


class MyClass
{
public function fnCallBack( $msg1 , $msg2 )
{
echo 'msg1:'.$msg1;
echo "
n";
echo 'msg2:'.$msg2;
}
}
$className = 'MyClass';
$fnName = "fnCallBack";
$params = array( 'hello' , 'world' );
call_user_func_array( array( $ className , $fnName ) , $params );最終的な実行結果は元の結果と同じです

2.3 オブジェクト メソッドのコールバック



I まず、以下に示すように、文字列形式で最も原始的な呼び出しメソッドを使用してみました。
class MyClass
{
private $name = 'abc';
パブリック関数 fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' )
{
echo 'オブジェクト名:'.$this->name;
echo "
n";
echo ' msg1:'.$msg1;
echo "
n";
echo 'msg2:'.$msg2;
}
}
$myobj = new MyClass();
$fnName = "fnCallBack";
$params = array( 'hello' , 'world' );
$myobj->$fnName();
結果:


呼び出しは成功しましたが、パラメータ params をこのメソッドに渡すにはどうすればよいですか? params を直接渡した場合、パラメータとして使用されます。 PHP マニュアルを確認すると、create_function 関数で文字列を使用して匿名関数を作成できることがわかりました。この匿名関数でコールバック関数を呼び出し、パラメータが渡されます。
まず、以下に示すように、匿名関数 anonymous を手動で作成します。
class MyClass
{
private $name = 'abc';
public function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' )
{
echo 'オブジェクト名:'.$this->name;
echo "
n";
br />n"; echo 'msg2:'。 $msg2;
}
}
$myobj = new MyClass();
$fnName = "fnCallBack";
$params = array( 'hello' , 'world' ) ;
//匿名関数の構築
function anonymous()
{
global $myobj;
global $fnName;
global $params;
$myobj->$fnName( $params[0] , $params[1] );
}
anonymous();
成功しました。効果は次のとおりです:
参考: http://myceo.blog.51cto.com/2340655/725411/http://blog.chinaunix.net/uid -20684384 -id-1895266.html
http://segmentfault.com/a/1190000002901770


http://www.abc3210.com/2012/phper_07/php- callback.shtml



上記の参考文献とブロガーに感謝します。

著作権に関する声明: こんにちは、CSDN で皆さんにお会いできてとてもうれしいです。皆さんと友達になれることを願っています!

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

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPおよびPython:類似点と相違点を調査しますPHPおよびPython:類似点と相違点を調査しますApr 19, 2025 am 12:21 AM

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境