ホームページ  >  記事  >  バックエンド開発  >  PHPのcall_user_func関数とcall_user_func_array関数の詳しい説明

PHPのcall_user_func関数とcall_user_func_array関数の詳しい説明

WBOY
WBOYオリジナル
2016-06-20 13:04:071099ブラウズ

PHP で call_user_func_array 関数と call_user_func 関数を使用する方法。また、func_get_args() 関数と func_num_args() 関数の使用方法についても説明します。

call_user_func 関数は、関数を動的に呼び出す必要がある場合に使用されます。この関数には次の 2 つの用途があります。

(1) 孤独な関数を呼び出します。

<p><?php</p>function funa($b,$c){<br />	echo $b;<br />	echo $c;<br />}<br />call_user_func('funa',"111","222");<br />call_user_func('funa',"333","444");<br />//结果输出:111 222 333 444<br />//大家有没有发现,这个用法有点像javascript中的call方法<br /><p>?></p>

(2) クラス内で関数を呼び出します:

<p><?php</p>class a{<br />	function b(){<br />		$args=func_get_args();<br />		$num=func_num_args();<br />		print_r($args);<br />		echo $num;<br />	}<br />}<br />call_user_func(array("a","b"),"111","222");<br /><p>?></p>

上記の例では、結果の出力は次のようになります。次のように:

配列

(
[0] => 111
[1] => 222
)

2

ヒント: func_get_args() 関数は、関数に渡されたパラメータを取得し、配列を返します。

call_user_func_array を見てみましょう。この関数は、パラメータが配列で渡されることを除いて、関数を動的に呼び出す必要がある場合にも使用されます。

<p><?php</p>function a($b,$c){<br />	echo $b;echo $c;<br />}<br />call_user_func_array('a',array("111","222"));<br />//结果输出:111 222<br /><p>?></p>

call_user_func_array 関数は、次のようなクラス内のメソッドを呼び出すこともできます。

<p><?php</p>Class ClassA{<br />	function bc($b,$c){<br />		$bc=$b + $c;echo $bc;<br />	}<br />}<br />call_user_func_array(array('ClassA','bc'),array("111","222"));<br />//结果输出:333<br /><p>?></p>

以下 関数を動的に呼び出す別の例を見てみましょう:

<p><?php</p>function otest1 ($a){<br />	echo( '一个参数' );<br />}<br />function otest2 ( $a,$b){<br />	echo( '二个参数' );<br />}<br />function otest3 ( $a ,$b,$c){<br />	echo( '三个啦' );<br />}<br />function otest (){<br />	$args=func_get_args();<br />	$num=func_num_args();<br />	call_user_func_array( 'otest'.$num,$args  );<br />}<br />otest("11");<br />otest("11","22");<br />otest("11","22","33");<br /><p>?></p>

読者は上記の例を自分で実行でき、その印象はより深くなるでしょう。


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