ホームページ  >  記事  >  バックエンド開発  >  PHP カスタム関数 call_user_func および call_user_func_array_PHP チュートリアルの詳細な説明

PHP カスタム関数 call_user_func および call_user_func_array_PHP チュートリアルの詳細な説明

WBOY
WBOYオリジナル
2016-07-21 15:26:59884ブラウズ

call_user_func 関数は、関数を呼び出す特別なメソッドに似ています。使用方法は次のとおりです:

コードをコピーします コードは次のとおりです:

function a($b,$c)
{
echo $b;
echo $ c;
call_user_func('a', "111","222");
//表示 111 222 333 444
?>


実際に配列を使用するのは奇妙ですが、開発者がそれについて何を考えたかはわかりません。


コードをコピーします コードは次のとおりです:
class a {
function b($c)
{
echo $c
}
}
call_user_func(array("a", "b "),"111");
//Display 111
?>


call_user_func_array 関数は、パラメータの構造を明確にするために異なる方法でパラメータが渡される点を除いて、call_user_func と非常によく似ています。

コードをコピーします
コードは次のとおりです: function a($b, $c ) {
echo $b;
echo $c;
call_user_func_array('a', array("111 ", "222"));
//Display 111 222
?>


call_user_func_array 関数もクラス内でメソッドを呼び出すことができます


コードをコピー

コードは次のとおりです:
クラス ClassA { function bc($b, $c) {
$bc = $b + $c ;
}
}
call_user_func_array(array('ClassA','bc'), array( "111", "222"));
//Display 333
?>


call_user_func 関数と call_user_func_array 関数の両方がサポートされており、通常の関数呼び出しとの機能の一貫性が高まります。コード

コードは次のとおりです。

function a(&$b)
{
$b++;
$c = 0 ; //表示 1 call_user_func_array('a', array(&$c)); echo $c;//表示 2
php call_user_func_array の簡単な使い方
今日、グループで lewis という人が次の質問をしました。 call_user_func_array の使い方 使ったことがないので何とも言えずマニュアルを見てみると、
call_user_func_array
(PHP 4 >= 4.0.4, PHP 5) と書かれていました。
call_user_func_array -- パラメーターの配列で指定されたユーザー関数を呼び出します。
mixed call_user_func_array ( callback function, array param_arr )
param_arr 内のパラメーターを使用して、 function で指定されたユーザー定義関数を呼び出します



コードをコピーします
コードは次のとおりです:


function foobar($arg, $arg2) {
echo __FUNCTION__, "got $arg and $arg2n";
class foo {
function bar($arg, $arg2) {
echo __METHOD__, " $arg と $arg2n を取得しました";
}
} // 2 つの引数を指定して foobar() 関数を呼び出します call_user_func_array(" foobar", array("one ", "two")); // 2 つの引数を指定して $foo->bar() メソッドを呼び出します $foo = new foo; call_user_func_array(array($foo, "bar" ), array("three" , "four"));
?>


上記のルーチンの出力は次のようになります:
foobar got one and two
foo::bar got three and four
例 2 call_user_func_array( ) using namespace name



コードをコピーします

コードは次のとおりです:


namespace Foobar;
class Foo {
static public function test($name) {
print "Hello {$name}!n ";
}
}
// PHP 5.3.0 以降
call_user_func_array(__NAMESPACE__ .'Foo::test', array('Hannes')); // PHP 5.3.0 以降 call_user_func_array(array(__NAMESPACE__ .' Foo', 'test'), array('Philip')); ?>
Hello Hannes!
例 3 ラムダ関数の使用



コードをコピーします

コードは次のとおりです:


$func = function($arg1, $arg2) {
return $arg1 * $arg2
}; func, array( 2, 4))); /* PHP 5.3.0 以降 */

;
上記のルーチンは次のように出力します:
int(8)
例を読んだら少しは理解できるはずですよね?
これが私がこの関数を理解する方法です。もし私が間違っているとしても、専門家に笑われないことを願っています:
この関数の実際の使用法は、最初のパラメータが文字型であるため、関数のオーバーロードに少し似ています。 、関数の名前 この関数が存在するからこそ、関数のオーバーロードも次のように使用できることがわかりました:
コードをコピー コードは次のとおりです:

/**
* サンプルを書き終えた後、これで完成したと思っていましたが、call_user_func_array() について質問している人に会い、マニュアルを読みました
* 上記のテスト関数は、次のサンプルに簡略化できることがわかりました。*/
function otest1 ($a)
{
echo( '1 つのパラメーター' );
function otest2 ( $a, $b)
{
echo( '2 つのパラメーター' );
function otest3 ( $a ,$b,$c)
{
echo( 'Three' );
}
関数 otest ()
{
$args = func_num_args(); '.$num, $args );
otest(1,2); わかりますか?私の最初の記述方法は、参考のために、「PHP での擬似オーバーロード」の記事に記載されています。 。 。 。



http://www.bkjia.com/PHPjc/323837.html

www.bkjia.com
本当
http://www.bkjia.com/PHPjc/323837.html

技術記事 call_user_func 関数は、関数を呼び出す特別なメソッドに似ています。使用方法は次のとおりです。 function a($b,$c) { echo $b; call_user_func(')あ、「111..
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。