无锡网站制作启,电商网站建设 平台,法律检索网站开发,建设百度网站多少钱call_user_func_array (PHP 4 4.0.4, PHP 5, PHP 7) call_user_func_array — 调用回调函数#xff0c;并把一个数组参数作为回调函数的参数 说明 mixed call_user_func_array ( callable $callback , array $param_arr ) 把第一个参数作为回调函数#xff08;callback 4.0.4, PHP 5, PHP 7) call_user_func_array — 调用回调函数并把一个数组参数作为回调函数的参数 说明 mixed call_user_func_array ( callable $callback , array $param_arr ) 把第一个参数作为回调函数callback调用把参数数组作param_arr为回调函数的的参数传入。 参数 callback 被调用的回调函数。 param_arr 要被传入回调函数的数组这个数组得是索引数组。 返回值 返回回调函数的结果。如果出错的话就返回FALSE 更新日志 版本说明5.3.0对面向对象里面的关键字的解析有所增强。在此之前使用两个冒号来连接一个类和里面的一个方法把它作为参数来作为回调函数的话将会发出一个E_STRICT的警告因为这个传入的参数被视为静态方法。范例 Example #1 call_user_func_array()例子 ?php
function foobar($arg, $arg2) {echo __FUNCTION__, got $arg and $arg2\n;
}
class foo {function bar($arg, $arg2) {echo __METHOD__, got $arg and $arg2\n;}
}// Call the foobar() function with 2 arguments
call_user_func_array(foobar, array(one, two));// Call the $foo-bar() method with 2 arguments
$foo new foo;
call_user_func_array(array($foo, bar), array(three, four));
? 以上例程的输出类似于 foobar got one and two
foo::bar got three and four Example #2 call_user_func_array()使用命名空间的情况 ?phpnamespace Foobar;class Foo {static public function test($name) {print Hello {$name}!\n;}
}// As of PHP 5.3.0
call_user_func_array(__NAMESPACE__ .\Foo::test, array(Hannes));// As of PHP 5.3.0
call_user_func_array(array(__NAMESPACE__ .\Foo, test), array(Philip));? 以上例程的输出类似于 Hello Hannes!
Hello Philip! Example #3 把完整的函数作为回调传入call_user_func_array() ?php$func function($arg1, $arg2) {return $arg1 * $arg2;
};var_dump(call_user_func_array($func, array(2, 4))); /* As of PHP 5.3.0 */? 以上例程会输出 int(8) Example #4 传引用 ?phpfunction mega($a){$a 55;echo function mega \$a$a\n;
}
$bar 77;
call_user_func_array(mega,array($bar));
echo global \$bar$bar\n;? 以上例程会输出 function mega $a55
global $bar55 call_user_func (PHP 4, PHP 5, PHP 7) call_user_func — 把第一个参数作为回调函数调用 说明 mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) 第一个参数 callback 是被调用的回调函数其余参数是回调函数的参数。 参数 callback 将被调用的回调函数callable。 parameter 0个或以上的参数被传入回调函数。 Note: 请注意传入call_user_func()的参数不能为引用传递。 Example #1 call_user_func() 的参考例子 ?php
error_reporting(E_ALL);
function increment($var)
{$var;
}$a 0;
call_user_func(increment, $a);
echo $a.\n;call_user_func_array(increment, array($a)); // You can use this instead before PHP 5.3
echo $a.\n;
? 以上例程会输出 0
1 返回值 返回回调函数的返回值。 更新日志 版本说明5.3.0对面向对象里面的关键字的解析有所增强。在此之前使用两个冒号来连接一个类和里面的一个方法把它作为参数来作为回调函数的话将会发出一个E_STRICT的警告因为这个传入的参数被视为静态方法。范例 Example #2 call_user_func() 的例子 ?php
function barber($type)
{echo You wanted a $type haircut, no problem\n;
}
call_user_func(barber, mushroom);
call_user_func(barber, shave);
? 以上例程会输出 You wanted a mushroom haircut, no problem
You wanted a shave haircut, no problem Example #3 call_user_func() 命名空间的使用 ?phpnamespace Foobar;class Foo {static public function test() {print Hello world!\n;}
}call_user_func(__NAMESPACE__ .\Foo::test); // As of PHP 5.3.0
call_user_func(array(__NAMESPACE__ .\Foo, test)); // As of PHP 5.3.0? 以上例程会输出 Hello world!
Hello world! Example #4 用call_user_func()来调用一个类里面的方法 ?phpclass myclass {static function say_hello(){echo Hello!\n;}
}$classname myclass;call_user_func(array($classname, say_hello));
call_user_func($classname .::say_hello); // As of 5.2.3$myobject new myclass();call_user_func(array($myobject, say_hello));? 以上例程会输出 Hello!
Hello!
Hello! Example #5 把完整的函数作为回调传入call_user_func() ?php
call_user_func(function($arg) { print [$arg]\n; }, test); /* As of PHP 5.3.0 */
? 以上例程会输出 [test] 注释 Note: 在函数中注册有多个回调内容时(如使用 call_user_func() 与 call_user_func_array())如在前一个回调中有未捕获的异常其后的将不再被调用。 create_function (PHP 4 4.0.1, PHP 5, PHP 7) create_function — Create an anonymous (lambda-style) function 说明 string create_function ( string $args , string $code ) 从传递的参数创建一个匿名函数并返回一个唯一的名称。 警告此函数内部执行eval因此与eval具有相同的安全性问题。 此外它具有不良的性能和内存使用特性。如果您使用的是PHP 5.3.0或更新版本则应使用本机匿名函数。 参数 通常这些参数将作为单引号分隔的字符串传递。 使用单引号字符串的原因是保护变量名不被解析否则如果使用双引号则需要转义变量名例如。\$阿瓦尔。 args 函数参数。 code 功能码。 返回值 以字符串形式返回唯一的函数名称或者返回错误的FALSE。 范例 Example #1 Creating an anonymous function with create_function() 您可以使用此功能例如从运行时收集的信息创建一个函数 ?php
$newfunc create_function($a,$b, return ln($a) ln($b) . log($a * $b););
echo New anonymous function: $newfunc\n;
echo $newfunc(2, M_E) . \n;
// outputs
// New anonymous function: lambda_1
// ln(2) ln(2.718281828459) 1.6931471805599
? 或者可能有一般的处理函数可以将一组操作应用于参数列表 Example #2 Making a general processing function with create_function() ?php
function process($var1, $var2, $farr)
{foreach ($farr as $f) {echo $f($var1, $var2) . \n;}
}// create a bunch of math functions
$f1 if ($a 0) {return b*a^2 .$b*sqrt($a);} else {return false;};
$f2 return \min(b^2a, a^2,b) \.min(\$a*\$a\$b,\$b*\$b\$a);;
$f3 if ($a 0 $b ! 0) {return ln(a)/b .log($a)/$b; } else { return false; };
$farr array(create_function($x,$y, return some trig: .(sin($x) $x*cos($y));),create_function($x,$y, return a hypotenuse: .sqrt($x*$x $y*$y);),create_function($a,$b, $f1),create_function($a,$b, $f2),create_function($a,$b, $f3));echo \nUsing the first array of anonymous functions\n;
echo parameters: 2.3445, M_PI\n;
process(2.3445, M_PI, $farr);// now make a bunch of string processing functions
$garr array(create_function($b,$a, if (strncmp($a, $b, 3) 0) return ** \$a\ .and \$b\\n** Look the same to me! (looking at the first 3 chars);),create_function($a,$b, ; return CRCs: . crc32($a) . , .crc32($b);),create_function($a,$b, ; return similar(a,b) . similar_text($a, $b, $p) . ($p%);));
echo \nUsing the second array of anonymous functions\n;
process(Twas brilling and the slithy toves, Twas the night, $garr);
? 以上例程会输出 Using the first array of anonymous functions
parameters: 2.3445, M_PI
some trig: -1.6291725057799
a hypotenuse: 3.9199852871011
b*a^2 4.8103313314525
min(b^2a, a^2,b) 8.6382729035898
ln(a)/b 0.27122299212594Using the second array of anonymous functions
** Twas the night and Twas brilling and the slithy toves
** Look the same to me! (looking at the first 3 chars)
CRCs: -725381282, 342550513
similar(a,b) 11(45.833333333333%) 但是对于lambda风格匿名函数来说最常见的用法是创建回调函数例如使用array_walk或usort Example #3 Using anonymous functions as callback functions ?php
$av array(the , a , that , this );
array_walk($av, create_function($v,$k, $v $v . mango;));
print_r($av);
? 以上例程会输出 Array
([0] the mango[1] a mango[2] that mango[3] this mango
) 一串字符串从较短到较长的顺序排列 ?php$sv array(small, larger, a big string, it is a string thing);
print_r($sv);? 以上例程会输出 Array
([0] small[1] larger[2] a big string[3] it is a string thing
) 将其从更长到更短的排序 ?phpusort($sv, create_function($a,$b,return strlen($b) - strlen($a);));
print_r($sv);? 以上例程会输出 Array
([0] it is a string thing[1] a big string[2] larger[3] small
) forward_static_call_array (PHP 5 5.3.0, PHP 7) forward_static_call_array — Call a static method and pass the arguments as array 说明 mixed forward_static_call_array ( callable $function , array $parameters ) .... .... .... 给个目录 函数处理 函数 call_user_func_array — 调用回调函数并把一个数组参数作为回调函数的参数call_user_func — 把第一个参数作为回调函数调用create_function — Create an anonymous (lambda-style) functionforward_static_call_array — Call a static method and pass the arguments as arrayforward_static_call — Call a static methodfunc_get_arg — 返回参数列表的某一项func_get_args — 返回一个包含函数参数列表的数组func_num_args — Returns the number of arguments passed to the functionfunction_exists — 如果给定的函数已经被定义就返回 TRUEget_defined_functions — 返回所有已定义函数的数组register_shutdown_function — 注册一个会在php中止时执行的函数register_tick_function — Register a function for execution on each tickunregister_tick_function — De-register a function for execution on each tick