PHP函数处理函数实例详解
1. call_user_func和call_user_func_array:
以上两个函数以不同的参数形式调用回调函数。见如下示例:
<?php class AnotherTestClass { public static function printMe() { print "This is Test2::printSelf.\n"; } public function doSomething() { print "This is Test2::doSomething.\n"; } public function doSomethingWithArgs($arg1, $arg2) { print 'This is Test2::doSomethingWithArgs with ($arg1 = '.$arg1.' and $arg2 = '.$arg2.").\n"; } } $testObj = new AnotherTestClass(); call_user_func(array("AnotherTestClass", "printMe")); call_user_func(array($testObj, "doSomething")); call_user_func(array($testObj, "doSomethingWithArgs"),"hello","world"); call_user_func_array(array($testObj, "doSomethingWithArgs"),array("hello2","world2"));
运行结果如下:
bogon:TestPhp$ php call_user_func_test.php This is Test2::printSelf. This is Test2::doSomething. This is Test2::doSomethingWithArgs with ($arg1 = hello and $arg2 = world). This is Test2::doSomethingWithArgs with ($arg1 = hello2 and $arg2 = world2).
2. func_get_args、func_num_args和func_get_args:
这三个函数的共同特征是都很自定义函数参数相关,而且均只能在函数内使用,比较适用于可变参数的自定义函数。他们的函数原型和简要说明如下:
int func_num_args (void) 获取当前函数的参数数量。
array func_get_args (void) 以数组的形式返回当前函数的所有参数。
mixed func_get_arg (int $arg_num) 返回当前函数指定位置的参数,其中0表示第一个参数。
<?php function myTest() { $numOfArgs = func_num_args(); $args = func_get_args(); print "The number of args in myTest is ".$numOfArgs."\n"; for ($i = 0; $i < $numOfArgs; $i++) { print "The {$i}th arg is ".func_get_arg($i)."\n"; } print "\n-------------------------------------------\n"; foreach ($args as $key => $arg) { print "$arg\n"; } } myTest('hello','world','123456');
运行结果如下:
Stephens-Air:TestPhp$ php class_exist_test.php The number of args in myTest is 3 The 0th arg is hello The 1th arg is world The 2th arg is 123456 ------------------------------------------- hello world 123456
3. function_exists和register_shutdown_function:
函数原型和简要说明如下:
bool function_exists (string $function_name) 判断某个函数是否存在。
void register_shutdown_function (callable $callback [, mixed $parameter [, mixed $... ]]) 在脚本结束之前或者是中途调用exit时调用改注册的函数。另外,如果注册多个函数,那么他们将会按照注册时的顺序被依次执行,如果其中某个回调函数内部调用了exit(),那么脚本将立刻退出,剩余的回调均不会被执行。
<?php function shutdown($arg1,$arg2) { print '$arg1 = '.$arg1.', $arg2 = '.$arg2."\n"; } if (function_exists('shutdown')) { print "shutdown function exists now.\n"; } register_shutdown_function('shutdown','Hello','World'); print "This test is executed.\n"; exit(); print "This comments cannot be output.\n";
运行结果如下:
Stephens-Air:TestPhp$ php call_user_func_test.php shutdown function exists now. This test is executed. $arg1 = Hello, $arg2 = World
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2013-01-08 Protocol Buffer技术详解(数据编码)
2012-01-08 Linux Shell经典实例解析--Oracle启动脚本(下)