当前位置: 首页 > news >正文

【PHP + 代码审计】函数详解2.0

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 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);

http://www.lryc.cn/news/321694.html

相关文章:

  • 宠物智能喂食机方案设计
  • 测试直播打赏需要考虑哪些测试要点?
  • Python练习(续)
  • 发布镜像到阿里云仓库
  • web蓝桥杯真题:灯的颜色变化
  • 通过docker容器安装zabbix6.4.12图文详解(监控服务器docker容器)
  • 算法打卡day21|回溯法篇01|理论知识,Leetcode 77.组合
  • C++ 输入输出
  • FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+HLS图像缩放+多路视频拼接,提供4套工程源码和技术支持
  • 【gpt实践】50个提升工作效率的GPT指令
  • 基于Springboot的高校竞赛管理系统(有报告)。Javaee项目,springboot项目。
  • 论文阅读——EarthPT
  • 软件测评中心:进行科技成果鉴定测试的注意事项和好处简析
  • Android 系统开发工具大全
  • C版本的-Unet-rknn推理
  • Transformer的前世今生 day04(ELMO、Attention注意力机制)
  • 稀碎从零算法笔记Day19-LeetCode:相交链表
  • AI系统性学习03—ChatGPT开发教程
  • 每日一练 | 华为认证真题练习Day201
  • nginx日志统计qps
  • 9.登入页面
  • js封装SDK 在VUE、小程序、公众号直接调用js调用后端接口(本文以vue项目为例)
  • ideaSSM社区二手交易平台C2C模式开发mysql数据库web结构java编程计算机网页源码maven项目
  • 利用子类化技术拦截win32窗口各种消息(包括但不限于鼠标键盘消息)
  • HCIP—OSPF课后练习一
  • Android 13.0 kenel和frameworks中修改ram运行内存的功能实现
  • 如何将应用程序发布到 App Store
  • Python进程与线程开发
  • 【3DsMax】UVW展开——以制作牙膏盒为例
  • Mysql数据库概念与安装