1、超全局变量
预定义变量$GLOBALS就是专业将用户的数据超全局化的
1)、$GLOBALS数组的每一个元素,都与当前的每一个全局变量是一一对应的,也就是说,每当用户创建一个全局变量,都会自动的在$GLOBALS数组里面增加一个元素,其中元素的键就是全局变量的名字,元素的值就是全局变量的值!
2)、反之,每当增加一个$GLOBALS数组的一个元素,就会自动的创建一个全局变量!
3)、全局变量与$GLOBALS所有的操作都是同步的,无论其中的一个做了任何的修改,都会以直接的相同的方式影响到另一个!
2、关键字global
global关键字并不是把一个变量变成了一个超全局变量,而是做了以下的两个事情:
1), 定义了一个局部变量,而且该局部变量的名字和外面的一个全局变量的名字是完全一样的!
2),将外面的全局变量的值的地址复制一份,传递给上面定义的局部变量
3、变量的生命周期
全局变量的生命周期:
1), 执行到变量的初始化语句的时候出现
2), PHP所有的资源(包括全局变量),都会在一个脚本周期结束的时候全部消失!
3),全局变量被unset之后也会消失
局部变量的生命周期:
1), 在调用到该函数并执行到该局部变量的初始化语句的时候出现
2), 在函数内如果unset掉该局部变量也会消失
3), 当函数执行完毕后就消失
4、静态局部变量
静态局部变量,是指该变量不会随着函数执行的结束而消失,而是,只要这个函数还在(在内存),该变量就一直存在!
最大特点:每次调用该函数后,其中的静态局部变量都会被保存下来而不会消失(下次调用该函数的时候可以接着使用)
定义静态局部变量的关键字:static
也就是在定义局部变量的时候前面加上static关键字就行了!
5、递归
函数的递归调用,就是函数在执行的时候自动调用自己
函数的递归有两个要素:
1), 递归出口:就是什么时候停止自己调用自己
2), 递归点:就是什么时候开始自己调用自己
案例:
递归调用的特点:
1), 代码的书写比较简单,但是执行的时候比较消耗内存资源!
2), 递归的本质就是以空间换取时间!短期内生成了大量的内存空间!
6、迭代
迭代就是从前往后来解决问题,体现在代码上,其实就是一个步骤的重复的执行,也就是循环结构!
案例:
7、字符串函数
strlen():获取字符串的长度,这里的长度是指该字符串的字节的长度!utf-8的编码中,中文是占3个字节!
substr():sub在这里是截取的意思,substr就是字符串截取函数,从指定字符串中的指定位置开始,截取指定长度的字符! 其实,字符串在内存中的存储形式有点类似于数组!所以,我们也可以像访问数组元素一样通过下标(第一个下标为0)来访问某个字符串里面的某个字符!
strtolower()|strtoupper():把字符串全部转换为小写|大写!仅针对英文有效,也针对汉字中的英文有效!
strrev():rev是reverse的意思,反转 ,所以该函数的作用是把字符串反转!由于是按字节反转,所以汉字在进行反转的时候多半是乱码!
strpos():这里的pos就是position位置的意思,所以该函数的作用就是从左往右查找并返回字符串中某个字符的起始位置!
strrpos():多出的r也是reverse的意思,该函数的作用一样是查找并返回字符串中的某个字符的起始位置,只不过这里是从右往左进行查找!也可以认为是从左往右最后一次出现该字符的位置!
strchr():别名strstr!也是字符串截取函数,是从左往右截取指定位置(指定的字符的位置)开始以后全部的字符串!
strrchr():也是字符串截取函数,是从右往左截取指定位置(指定的字符的位置)开始以后全部的字符串!
比如,截取一个文件的后缀名:
还有一种方法:
trim():有时候,用户在提交表单的时候(尤其是在注册用户名和写密码的时候),可能不经意间在字符串的前面或后面多敲了一些空格,为了增加客户的体验度,我们需要手动的将这些空格等特殊字符去除掉!这个功能就是由trim函数来实现的!
类似的函数还有ltrim和rtrim,分别是去除左边和右边的特殊空白字符,但是使用的最多的还是trim!
str_replace():字符串替换函数,有三个参数,第一个参数是替换什么字符串,第二个参数是替换成什么字符串,第三个参数是在哪个字符串中进行替换
str_repeat():有两个参数,第一个是需要重复的字符串,第二个参数是重复的次数
8、时间函数
time():时间戳,格林威治1970年1月1日零时起,到现在的秒数!
date():使用时间格式占位符将指定时间戳格式化为对应格式的形式!
时间格式占位符有很多,但是我们只需要记忆常见的6个:年:Y,月:m,日:d,时:H,分:i,秒:s
基本的语法形式如下:
date(“带有格式占位符的字符串”,时间戳),其中第二个参数(时间戳)可以省略,缺省值就是当前时间戳!
strtotime():将一个符合格式的时间字符串,转换为一个时间戳!
microtime():得到一个微秒的时间戳字符串(字符串型),或加上一个参数true(默认值为false)之后得到一个微秒的时间(浮点型),一般可以用来测试代码执行的效率!
9、数学函数
abs():取绝对值
floor():向下取整,获得一个比当前数值小的最大整数!
ceil():向上取整
round():四舍五入,应该有两个参数:第一个参数是一个数值,第二个参数是精确的小数的位数,缺省值为0
rand()|mt_rand():都是获得一个指定区间的随机整数,只是mt_rand的效率比rand要高!
注意:
这里的区间是闭区间!(1,100)是开区间,[1,100]是闭区间!