🍬 博主介绍
👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
目录
静态变量
可变函数
匿名函数
基本概念
闭包
伪类型
静态变量
静态变量:static,是在函数内部定义的变量,使用static关键字修饰,用来实现跨函数共享数据的变量:函数运行结束所有局部变量都会清空,如果重新运行一下函数,所有的局部变量又会重新初始化。
基本语法:
Function 函数名(){
//定义变量
Static $变量名 = 值; //通常会在定义的时候就直接赋值
}
静态变量的作用是为了跨函数共享数据(同一个函数被多次调用)
- 静态变量的原理:系统在进行编译的时候就会对static这一行进行初始化:为静态变量赋值
- 函数在调用的时候,会自动跳过static关键字这一行
可变函数
可变函数:当前有一个变量所保存到值,刚好是一个函数的名字,那么就可以使用变量+()来充当函数名使用。
<?php
//可变函数
//定义系统函数
function sys_function($arg1,$arg2)
{
//给指定的函数($arg1),求对应的第二个参数的4次方($arg2)
$arg2 = $arg2 + 10;
return $arg1($arg2); //user_function(20)
}
//定义一个用户函数:求一个数的4次方
function user_function($num)
{
return $num * $num * $num * $num;
}
//求10的4次方
echo sys_function('user_function',10);
可变函数在系统使用的过程中还是比较多的,尤其是使用很多系统函数的时候:需要用户在外部定义一个自定义函数,但是是需要传入到系统函数内部使用。
匿名函数
基本概念
匿名函数:没有名字的函数
基本语法:
变量名 = Function(){
函数体
};
变量保存匿名函数,本质得到的是一个对象(Closure)
闭包
- 闭包:closure, 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)
- 简单理解:函数内部有一些局部变量(要执行的代码块)在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)
<?php
//闭包函数
function display()
{
//定义变量:局部变量
$name = __FUNCTION__;
//定义匿名函数
$innerfunction = function() use($name){ //use 就是相当于Java中的继承,就是$name的东西留给$innerfunction函数
//内部函数
echo $name;
};
//调用函数
$innerfunction();
}
display();
证明:函数的局部变量在函数使用完之后没有被释放?
1、 使用内部匿名函数;
2、 匿名函数使用句变量:use;
3、 匿名函数被返回给外部使用;
伪类型
伪类型:假类型,实际上在PHP中不存在的类型。但是通过伪类型可以帮助程序员去更好的查看操作手册从而更方便学习。
伪类型主要有两种:在三大类八小类之外
Mixed:混合的,可以是多种PHP中的数据类型
Number:数值的,可以是任意数值类型(整形和浮点型)
常用系统函数
1)有关输出的函数
print():类似于echo输出提供的内容,本质是一种结构(不是函数),返回1,可以不需要使用括号
print_r():类似于var_dump,但是比var_dump简单,不会输出数据的类型,只会输出值(数组打印使用比较多)
2)有关时间的函数
date():按照指定格式对对应的时间戳(从1970年格林威治时间开始计算的秒数),如果没有指定特定的时间戳,那么就是默认解释当前时间戳
time():获取当前时间对应的时间戳
microtime():获取微秒级别的时间
Strtotime():按照规定格式的字符串转换成时间戳
3)有关数学的函数
max():指定参数中最大的值
min():比较两个数中较小的值
rand():得到一个随机数,指定区间的随机整数
mt_rand():与rand一样,只是底层结构不一样,效率比rand高(建议使用)
round():四舍五入
ceil():向上取整
floor():向下取整
pow():求指定数字的指定指数次结果:pow(2,8) == 2^8 == 256
abs():绝对值
sqrt():求平方根
4)有关函数的函数
function_exists():判断指定的函数名字是否在内存中存在(帮助用户不去使用一个不存在的函数,让代码安全性更高)
func_get_arg():在自定义函数中去获取指定数值对应的参数
func_get_args():在自定义函数中获取所有的参数(数组)
func_num_args():获取当前自定义函数的参数数量
echo '<br/><pre>';
function test($a,$b)
{
//获取指定参数
var_dump(func_get_arg(1));
//获取所以参数
var_dump(func_get_args());
//获取参数数量
var_dump(func_num_args());
}
//调用函数
function_exists('test') && test(1,'2',3,4);