ホームページ バックエンド開発 PHPチュートリアル php _call() と call_user_func_array() について

php _call() と call_user_func_array() について

Jun 13, 2016 pm 01:07 PM
array function method

php __call() と call_user_func_array() の理解
1. 混合 __call (文字列名, 配列引数)

マジック メソッド __call() を使用すると、存在しないメソッドの呼び出しをキャプチャできます。これにより、__call() を使用して、 に依存するユーザー定義のメソッド処理を実装できます。呼び出される実際のメソッドの名前。これは、たとえばプロキシの実装に役立ちます。関数に渡された引数は、__call() メソッドから返される値として定義されます。メソッドの呼び出し元。

翻訳: このマジック メソッドを使用すると、ユーザーは、呼び出し時に実際のメソッド名に依存するメソッドを呼び出すことができます。典型的な例はプロキシを実装するために使用されます。メソッドのパラメータ $arguments は配列であり、__call() の戻り値はメソッド呼び出し元に返されます。

Vernacular: このメソッドは主に動的実装に使用されます。メソッド呼び出し 別のクラスが定義されている_ _call() メソッドの場合、ユーザーがこのクラスの存在しないメソッドを呼び出すと、呼び出された存在しないメソッドのメソッド名とパラメーターを使用して、ユーザーが定義した対応する操作を実行できます。このとき、__call() メソッドのパラメータはメソッド名と、呼び出される存在しないメソッドのパラメータです。

Example

<?php

class Person
{
	function talk( $sound )
	{
		echo $sound;
	}
				
	function __call( $method , $args )
	{
		echo 'you call method ' . $method . '<br>';
					
		echo 'and the arguments are <br>';
					
		var_dump( $args );
	}
}

$person = new Person();
			
$person->test( 1 , TRUE );

?>
ログイン後にコピー


プログラム出力

Quote

メソッド test
を呼び出し、引数は
array
0 => int 1
1 => boolean true





2.mixed call_user_func_array ( callback function, array param_arr )


param_arr のパラメータを使用してユーザー定義関数を呼び出します。

parameters


function
呼び出される関数。

param_arr
インデックス付き配列として関数に渡されるパラメータ。


戻り値
関数の結果を返すか、エラーの場合は FALSE を返します。

このメソッドは、クラス名、メソッドを渡すことでメソッドを動的に呼び出す効果を実現できます。クラス内の名前とメソッドのパラメータ



<?php 
	class Person
	{
		function talk( $sound )
		{
			echo $sound;
		}
				
		function __call( $method , $args )
		{
			echo 'you call method ' . $method . '<br>';
					
			echo 'and the arguments are <br>';
					
			var_dump( $args );
		}
	}

        $person = new Person();
			
	call_user_func_array( array( $person , 'talk' ) , array( 'hello' ) );
?>
ログイン後にコピー


プログラム出力

引用

hello




2 つのメソッドを共有して実装します。プロキシ モデル

class Person
	{
		function talk( $sound )
		{
			echo $sound;
		}
				
		function __call( $method , $args )
		{
			echo 'you call method ' . $method . '<br>';
					
			echo 'and the arguments are <br>';
					
			var_dump( $args );
		}
	}
			
	class PersonProxy
	{
		private $person;
				
		function __construct()
		{
			$this->person = new Person();
		}
		
		function __call( $method , $args )
		{
			call_user_func_array( array( $this->person , $method ) , $args );
		}
	}
			
	$person_proxy = new PersonProxy();

        $person_proxy->talk( 'thank you' );	
ログイン後にコピー


プログラム出力

見積もり
ありがとうございます

1階 チャイナグドベア 2011-12-07
php _call() と call_user_func_array() について
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

機能とはどういう意味ですか? 機能とはどういう意味ですか? Aug 04, 2023 am 10:33 AM

ファンクションとは、関数を意味します。これは、特定の関数を備えた再利用可能なコード ブロックです。プログラムの基本コンポーネントの 1 つです。入力パラメータを受け取り、特定の操作を実行し、結果を返すことができます。その目的は、再利用可能なコード ブロックをカプセル化することです。コードの再利用性と保守性を向上させるコード。

PHP 致命的エラーの解決策: メンバー関数 fetch() の呼び出し PHP 致命的エラーの解決策: メンバー関数 fetch() の呼び出し Jun 23, 2023 am 09:36 AM

Web アプリケーション開発に PHP を使用する場合、多くの場合データベースを使用する必要があります。データベースを使用すると、エラー メッセージがよく発生します。その中でも、PHPFatalerror: Calltoamemberfunctionfetch() は、PDO を使用してデータベースをクエリするときに発生する比較的一般的なエラーです。では、このエラーの原因と解決方法は何でしょうか?この記事ではそれについて詳しく説明します。 1. エラーの原因

C# の Array.Sort 関数を使用して配列を並べ替える C# の Array.Sort 関数を使用して配列を並べ替える Nov 18, 2023 am 10:37 AM

タイトル: Array.Sort 関数を使用して C# で配列を並べ替える例 本文: C# では、配列は一般的に使用されるデータ構造であり、多くの場合、配列を並べ替える必要があります。 C# には Array クラスが用意されており、このクラスには配列を簡単に並べ替えるための Sort メソッドがあります。この記事では、C# で Array.Sort 関数を使用して配列を並べ替える方法を示し、具体的なコード例を示します。まず、Array.Sort 関数の基本的な使用法を理解する必要があります。 Array.So

Python の「enumerate()」関数の目的は何ですか? Python の「enumerate()」関数の目的は何ですか? Sep 01, 2023 am 11:29 AM

この記事では、Python の enumerate() 関数と「enumerate()」関数の目的について学びます。 enumerate() 関数とは何ですか? Python の enumerate() 関数は、データ コレクションをパラメータとして受け取り、列挙オブジェクトを返します。列挙オブジェクトはキーと値のペアとして返されます。キーは各項目に対応するインデックス、値は項目です。構文 enumerate(iterable,start) パラメータ iterable - 渡されたデータ コレクションは、iterablestart と呼ばれる列挙オブジェクトとして返すことができます。 - 名前が示すように、列挙オブジェクトの開始インデックスは start によって定義されます。無視したら

MySQL.procテーブルの役割と機能の詳しい説明 MySQL.procテーブルの役割と機能の詳しい説明 Mar 16, 2024 am 09:03 AM

MySQL.proc テーブルの役割と機能の詳細な説明。MySQL は人気のあるリレーショナル データベース管理システムです。開発者が MySQL を使用する場合、多くの場合、ストアド プロシージャ (StoredProcedure) の作成と管理が必要になります。 MySQL.proc テーブルは非常に重要なシステム テーブルであり、ストアド プロシージャの名前、定義、パラメータなど、データベース内のすべてのストアド プロシージャに関連する情報が保存されます。この記事では、MySQL.proc テーブルの役割と機能について詳しく説明します。

PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 Jun 27, 2023 pm 01:48 PM

PHP でプログラミングする場合、多くの場合、配列をマージする必要があります。 PHP には、配列のマージを完了するための array_merge() 関数が用意されていますが、配列内に同じキーが存在する場合、この関数は元の値を上書きします。この問題を解決するために、PHP は配列をマージして同じキーの値を保持できる array_merge_recursive() 関数を言語で提供し、プログラム設計をより柔軟にします。配列マージ

PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 Jun 26, 2023 pm 01:41 PM

PHP には、配列操作をより便利かつ高速にする強力な配列関数が多数あります。 2 つの配列を結合して連想配列にする必要がある場合、PHP の array_combine 関数を使用してこの操作を実行できます。この関数は、実際には、ある配列のキーを別の配列の値として新しい連想配列に結合するために使用されます。次に、PHP の array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法を説明します。 array_comb について学ぶ

Vue.use関数の使い方と機能 Vue.use関数の使い方と機能 Jul 24, 2023 pm 06:09 PM

Vue の使い方と機能.use Function Vue は、多くの便利な機能を提供する人気のフロントエンド フレームワークです。その 1 つは Vue.use 関数で、これを使用すると Vue アプリケーションでプラグインを使用できるようになります。この記事では、Vue.use 関数の使い方と機能を紹介し、いくつかのコード例を示します。 Vue.use 関数の基本的な使用法は非常に簡単です。Vue がインスタンス化される前に関数を呼び出し、使用するプラグインをパラメータとして渡すだけです。簡単な例を次に示します。 // プラグインの導入と使用

See all articles