ホームページ  >  記事  >  バックエンド開発  >  php _call() と call_user_func_array() について

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

WBOY
WBOYオリジナル
2016-06-13 13:07:591260ブラウズ

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 までご連絡ください。