变量

PHP中extract函数各种用法介绍

a 夏天 提交于 2020-02-24 03:36:55
直接上代码: 代码如下 复制代码 <?php $my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse"); extract($my_array); echo "$a = $a; $b = $b; $c = $c"; ?> 猜猜会会出现什么结果? 输出: 代码如下 复制代码 $a = Cat; $b = Dog; $c = Horse 没有定义变量$a $b $c ,也没有赋值,为什么就可以可以获取值了? 比方说,可以很方便的提取$_POST或者$_GET的元素,对表单提交上来的内容不能不用一一赋值,直接使用下面代码: form.html 代码如下 复制代码 <form action="action.php" method="post"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit"> 在action.php中只要使用extract()函数将$_POST全局数据解开: action.php 代码如下 复制代码 <?php extract($_POST); //相当于$username = $_POST['username']; //$password = $_POST[

【代码审计】变量覆盖漏洞详解

余生颓废 提交于 2020-02-24 03:35:23
一、漏洞介绍 变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击 二、漏洞函数 变量覆盖漏洞大多数由函数使用不当导致,经常引发变量覆盖漏洞的函数有:extract(),parse_str()和import_request_variables() 1、extract()   目前最常见的就是这个函数,使用频率最高,导致的漏洞也最多    extract ( array ,extract_rules,prefix) 参数 描述 array 必需。规定要使用的输入。 extract_rules (可选) extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中的变量名是否冲突。 对非法、数字和冲突的键名的处理将根据此参数决定。可以是以下值之一: 可能的值: EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。 EXTR_SKIP - 如果有冲突,不覆盖已有的变量。(忽略数组中同名的元素) EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix。自 PHP 4.0.5 起,这也包括了对数字索引的处理。 EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix(第三个参数)。 EXTR_PREFIX_INVALID - 仅在非法或数字变量名前加上前缀

PHP extract() 函数

邮差的信 提交于 2020-02-24 03:13:05
定义和用法 PHP extract() 函数从数组中把变量导入到当前的符号表中。 对于数组中的每个元素,键名用于变量名,键值用于变量值。 第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时,extract() 函数如何对待这样的冲突。 本函数返回成功设置的变量数目。 语法 extract ( array , extract_rules , prefix) 参数 描述 array 必需。规定要使用的输入。 extract_rules 可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中的变量名是否冲突。 对非法、数字和冲突的键名的处理将根据此参数决定。可以是以下值之一: 可能的值: EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。 EXTR_SKIP - 如果有冲突,不覆盖已有的变量。(忽略数组中同名的元素) EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix。自 PHP 4.0.5 起,这也包括了对数字索引的处理。 EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix(第三个参数)。 EXTR_PREFIX_INVALID - 仅在非法或数字变量名前加上前缀 prefix。本标记是 PHP 4.0.5 新加的。 EXTR_IF_EXISTS -

python3基础教程:详解Python3 基本数据类型

我是研究僧i 提交于 2020-02-23 23:32:54
这篇文章主要介绍了Python3 基本数据类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 Python3 基本数据类型 Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。 等号(=)用来给变量赋值。 等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。 多个变量赋值 同值多变量 a = b = c = 1 不同值多变量 a, b, c = 1, 2, "hello word" a = 1 b = 2 c = "hello word" 标准数据类型 不可变数据类型 Number(数字) String(字符串) Tuple(元组) 可变数据类型 List(列表) Set(集合) Dictionary(字典) Number 数字 支持 int、float、bool、complex(复数)。 String 字符串 变量[头下标:尾下标] 索引值以 0 为开始值,-1 为从末尾的开始位置。Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始,且字符串不能改变。 Python 使用反斜杠()转义特殊字符,如果你不想让反斜杠发生转义

关于闭包

故事扮演 提交于 2020-02-23 21:15:01
闭包是个啥? 闭包实际上就是Javascript中的一种函数的高级应用方式 。 每个函数在执行时,都会堆内开辟一个执行空间,当调用完毕之后,这个函数的执行空间会立即删除。但有的时候,我们想让这个执行空间保留着,就说时延长它的寿命吧,该怎么办呢?当函数内部返回一个 复杂数据类型 时,并且在函数的外部有变量正在接受这个 复杂数据类型 ,这个时候函数的执行空间就不会销毁,这就是闭包存在的意义。 闭包产生的必要条件 三个条件,缺一不可: 在函数 A 内部直接或间接返回一个函数 B; B 函数内部使用着函数 A 的私有变量; 函数 A 外部有一个变量接受着它的返回值,即函数 B; 如图: 变量res接受着函数a的返回值,res()调用了函数 b,打印的结果为10;这样就形成了一个不会自动销毁的a 函数的执行空间,我们称它为 闭包空间 。 函数 a 里面返回的函数 b,是函数 a 的 闭包函数 ; 闭包的特点 1. 延长了变量的生命周期 优点:因为执行空间没有销毁,所以变量也保留了下来,延长了变量的生命周期; 缺点:因为执行空间不销毁,会一直占用着内存,使用次数过多的时候,容易造成内存溢出; 2.可以访问函数内部的私有变量 优点:利用闭包函数可以访问函数内部的私有变量; 缺点:必须要一直保持外部变量的调用,同时会一直存在在内存中; 3.保护私有变量(只要是函数,就有这个特点) 优点

面试必问之闭包

早过忘川 提交于 2020-02-23 20:31:06
/** 1、闭包的概念 闭包可是指有权访问另一函数作用域中的变量的函数,或者简单理解为定义在一个函数内部的函数; **//** 2、闭包的特点 a、函数嵌套函数 b、函数内部可以引用函数外部的参数和变量 b、参数和变量不会被垃圾回收机制回收 **//** 3、闭包的优缺点 优点: ①保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突 ②在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存) ③匿名自执行函数可以减少内存消耗 缺点: ①被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null; ②其次由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响; **//** 4、闭包有哪些应用场景? ①闭包之定时器参数传递 //原生的setTimeout擦混提的第一个函数不能带有参数 setTimeout(function(a){ alert(a) },1000) //通过闭包可以实现传参效果 function b(a){ return function(){ alert(a); } } var f = b(1); setTimeout(f,1000); ②闭包之setTimeout for(var i = 0; i < 5;

《JAVA编程思想》 · 笔记

女生的网名这么多〃 提交于 2020-02-23 19:14:49
1 一个类中的成员方法中,定义一个变量,则该变量不会被初始化。 如:“ int a;” 中的a不会被初始化成a=0; 2 .对于类:class a { void m(double a){} } ,可以运行语句:(new a()).m(5); 其中参数5会被认为是int类型,但在类中找不到合适的方法,于是会自动转化为double 类型。 3 .不可用返回值来区分方法(即无法实现多态性) 4 .一个类的成员方法被private所修饰,此时,该方法会被“隐藏”。在继承该类时,无法重载该方法,若试图用public来创建同名的方法,此时其实是创建了一个新的方法,而没有重载。 5 .一个类的初始化: 先加载静态成员变量,后加加载非静态成员变量; 先加载成员变量,后加载成员方法。 6 .【加载顺序】B类继承A类: A类的静态成员变量 B类的静态成员变量 A类的非静态成员变量 A类的构造方法 B类的非静态成员变量 B类的构造器 来源: CSDN 作者: 喵帕斯酱 链接: https://blog.csdn.net/qq_42442111/article/details/104459414

你还用拼音为变量命名?新人OIer别傻了,教你写出优质代码

时光怂恿深爱的人放手 提交于 2020-02-23 19:00:34
本篇文章适用语言:python,c++,Java.(其实我就是 随便bb ) 我们在编辑代码的时候,不免拿其他人的代码进行学习,或者将自己的代码拿给别人修改.这个时候,如何让别人快速读懂你的代码,是提升效率的关键,而且一个好的码风可以让自己读起来也赏心悦目.那么接下来我就会对这一部分进行讲解. 变量命名 我将码风分为两个部分,变量命名和代码书写. 变量命名当中,最最最最恶心的一点就是拿拼音来为变量命名,你拿x,y,z都好过.什么书本的数量用"shuben",你是小学没学过吗?我幼儿园都会"book".不仅打起来麻烦而且让人感觉你很low.要是让我看见还让我给他改代码我就一拳上去. 比如答案就用"ans"(answer),表示访问的不要用bj(标记),"flag","vis","visit"用着不香吗?拼音很容易让人不知道什么意思,常常过两天来看你自己都不知道.而用英文简写就很容易让人知道什么意思.这也就是代码编辑中的约定俗成. 再者,比如循环变量i,j,k,实在不行加一个l,乱七八糟的不要用.abcxyz等最好不要在太多地方使用,n,m都可以. 代码书写 使我们的代码变得清晰美观的只有一个键--空格.空格的使用使代码变得不那么拥挤. 比如在使用逗号的时候,可以将逗号后面留一个空格.其次,在"="前后也可以有空格,";"后面也允许用空格,"==","&&","||",">=","<=

作用域

偶尔善良 提交于 2020-02-23 17:37:09
1. 什么是命名空间 2. globals、locals 3. LEGB 规则 1. 什么是命名空间 我们在编写 Python 程序的过程中,如果要使用变量和函数,都需要先对变量和函数命名后才能使用。Python 会把命名后的变量和函数分配到不同的命名空间,并通过名称来识别它们。 Python为什么要区分不同的命名空间呢?它有两个作用:一个作用是不同的命名空间对应不同的作用域;另外一个作用是防止命名冲突。 2. globals、locals 在提到变量的作用域时,经常提到局部变量和全局变量,之所有称之为局部、全局,就是因为他们的自作用的区域不同,这就是作用域。 3. LEGB 规则 Python 使用 LEGB 的顺序来查找一个符号对应的对象: locals -> enclosing function -> globals -> builtins locals 当前所在命名空间(如函数、模块),函数的参数也属于命名空间内的变量。 enclosing 外部嵌套函数的命名空间(闭包中常见)。 1 def fun1(): 2 a = 10 3 def fun2(): 4 # a 位于外部嵌套函数的命名空间 5 print(a) globals 全局变量,函数定义所在模块的命名空间。 1 a = 1 2 def fun(): 3 # 需要通过 global 指令来声明全局变量 4