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

news2024/11/25 22:41:06
🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 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.coloradmin.cn/o/1531155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

matlab 基于小波变换的油气管道泄露信号检测

1、内容简介 略 71-可以交流、咨询、答疑 基于小波变换的油气管道泄露信号检测 去噪、小波变换、油气管道泄露、信号检测 2、内容说明 摘 要&#xff1a; 油气管道泄漏会造成严重危害&#xff0c;因此&#xff0c;亟需寻找一种能快速检测油气管道信号的技术。传统的 傅里…

Gif动态闪图如何制作?教你1分钟快速制作

动态文字闪图是一种独特而有趣的图像效果&#xff0c;通过将文字以闪烁、跳动或变换的方式呈现&#xff0c;给人一种动态感和视觉冲击力。如果你想制作自己的动态文字闪图&#xff0c;下面是一些简单的方法来帮助你完成这个任务。使用在线闪图制作网站-GIF5工具网&#xff0c;无…

Ubuntu虚拟机的IP总频繁变化,导致Xshell断开连接

文章目录 一、IP变化的原因二、解决方法&#xff1a;固定IP三、参考文章 一、IP变化的原因 1.DHCP协议 虚拟机系统(Ubuntu、CentOS、UOS等Linux系统)启动后&#xff0c;加入本地局域网网络时&#xff0c;会向本地网络申请租约一个IP地址&#xff0c;租约时长不定。我这里租约时…

程序员下班以后做什么副业合适?

我就是一个最普通的网络安全工程师&#xff0c;出道快10年了&#xff0c;不出意外地遭遇到瓶颈期&#xff0c;但是凭技术在各大平台挖漏洞副业&#xff0c;硬是妥妥扛过来了。 因为对于程序员来讲&#xff0c;这是个试错成本很低、事半功倍的选择。编程技能是一种强大生产力&a…

RocketMQ tag不匹配

问题现象 消费组消费消息显示tag不匹配&#xff0c;但检查配置是一样的tag 消费端配置 原因分析 订阅组订阅一致性 订阅一致性是指同一个订阅组&#xff08;ConsumerGroup&#xff09;下所有的 Consumer 实例订阅&#xff0c;Topic 与 Tag 必须完全一致&#xff0c;否则可能…

首页效果炫酷的wordpress免费主题模板

视频背景免费WP主题 简洁大气的视频背景wordpress主题&#xff0c;找大视频背景的主题可以看看这个。 https://www.wpniu.com/themes/193.html 红色全屏大图WP主题 非常经典的一款免费wordpress主题&#xff0c;红色全屏大图满足多行业使用。 https://www.wpniu.com/themes…

代码随想录算法训练营第29天| 491.递增子序列、46.全排列、47.全排列 II

491.递增子序列 题目链接&#xff1a;复原IP地址 题目描述&#xff1a;给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数…

STM32CubeMX学习笔记23---FreeRTOS(任务的挂起与恢复)

1、硬件设置 本实验通过freertos创建两个任务来分别控制LED2和LED3的亮灭&#xff0c;需要用到的硬件资源 LED2和LED3指示灯串口 2、STM32CubeMX设置 根据上一章的步骤创建两个任务&#xff1a;STM32CubeMX学习笔记22---FreeRTOS&#xff08;任务创建和删除&#xff09;-CS…

XMind:让思维可视化,提升工作效率的利器

XMind是一款全球领先的开源思维导图和头脑风暴软件&#xff0c;它应用全球最先进的Eclipse RCP软件架构&#xff0c;拥有优秀的用户体验&#xff0c;凭借简单易用、功能强大的特点&#xff0c;在2013年被著名互联网媒体Lifehacker评选为全球最受欢迎的思维导图软件。目前&#…

小程序用什么SSL证书比较好?

小程序开发时为了实现HTTPS加密通信&#xff0c;可以选择以下几种类型的SSL证书&#xff1a; 1.域名验证型SSL证书 - DV证书是最基础的SSL证书类型&#xff0c;主要验证域名的所有权。对于个人开发者或小型企业的小程序&#xff0c;特别是展示类小程序或无需进行深度身份验证的…

可下载九大报纸种类的下载工具

今天给大家分享一个可以下载中国证券报&#xff0c;人民日报&#xff0c;农民日报&#xff0c;工人日报&#xff0c;江西日报&#xff0c;科技日报&#xff0c;NEWS&#xff0c;经济日报&#xff0c;解放军报&#xff0c;赣南日报的下载工具。 一、主要特点&#xff1a; 1.可以…

shardingsphere-elastic-job-ui 管理界面安装

shardingsphere-elasticjob 从 3.0.0-alpha 版本开始&#xff0c;将console管理界面单独拆分出来 下载前需要 安装 maven 配置环境变量 安装 nodejs 配置环境变量 下载ui源码,安装 官方并未直接提供可执行的二进制文件,需要下载源码编译,目前发行版 3.0.2 https://github.com/…

Docker使用(四)Docker常见问题分析和解决收集整理

Docker使用(四)Docker常见问题分析和解决收集整理 五、常见问题 1、 启动异常 【描述】&#xff1a; 【分析】&#xff1a;[rootlocalhost ~]# systemctl status docker 【解决】&#xff1a; &#xff08;1&#xff09;卸载后重新安装&#xff0c;不能解决这个问题。 …

日本370公告 各类材质餐具进出口检测 报告出具

食品接触材料指的是在正常使用过程中与食品进行接触的材料&#xff0c;涉及的产品包括&#xff1a;食品包装&#xff0c;餐具、厨具&#xff0c;食品加工机械&#xff0c;厨电产品等&#xff0c;但是由于其在生产过程中使用了一些化学原材料及化学助剂等&#xff0c;使得他们在…

Figure 公司推出首款集成 OpenAI 大模型的自主人形机器人,开启与人类全面对话的新纪元

2024年3月13日&#xff0c;Figure&#xff0c;一家在人工智能机器人领域引领创新的公司&#xff0c;宣布推出了一款革命性的自主人形机器人。这款全新的 demo 机器人不仅标志着商业上可行的自主人形机器人技术的突破&#xff0c;更是通过整合 OpenAI 的先进大模型技术&#xff…

Sora没体验资格?开源项目:Open-Sora,复现类Sora视频生成方案

项目简介 Open-Sora项目是一项高效制作高质量视频的工作&#xff0c;明确所有权使用其模型、工具和内容的计划。通过采用开源原则&#xff0c;Open-Sora 不仅实现了先进的视频生成技术的普及&#xff0c;还提供了一个专业且用户界面的方案&#xff0c;简化了视频制作的复杂性。…

【Web应用技术基础】HTML(3)——表格

目录 题目1&#xff1a;原始表格 题目2&#xff1a;width、height 题目3&#xff1a; cellpadding 题目4&#xff1a;cellspacing、cellpadding 题目5&#xff1a;caption 题目6&#xff1a;rowspan 题目7&#xff1a;colspan 题目8&#xff1a;汇总题 题目1&#xff1…

vue脚手架中,如何解决控制台打印不显示源代码对应的行数而是打包后的JS文件的行数?

直接上图说话&#xff1a; 原因&#xff1a; 当你在浏览器的控制台看到的错误行数是打包后的 JavaScript 文件的行数&#xff0c;而不是源代码的行数&#xff0c;这通常是因为你的项目没有配置或者没有正确配置 source map。 source map 是一个映射文件&#xff0c;它可以将打…

电脑屏幕监控软件下载(一键下载,终身使用)

很多企业都想要对员工进行电脑监控管理&#xff0c;方便了解员工工作状态如何。 但是&#xff0c;如何选择软件&#xff0c;以及下载方法&#xff0c;是很多人首先会考虑的问题。 对于监控软件来说&#xff0c;首先&#xff0c;我们需要明确电脑屏幕监控软件的重要性。 对于企…

MySQL日志的一些疑惑解答

1.两阶段提交&#xff0c;要是在binlog写入磁盘后&#xff0c;redolog还没处于commit状态&#xff0c;这时事务会回滚吗&#xff1f; 我们先来看一下崩溃恢复时的判断规则。 如果 redo log 里面的事务是完整的&#xff0c;也就是已经有了 commit 标识&#xff0c;则直接提交&…