做了点测试题,复习几个概念,写一下理解,免得再去看别人写的东西。
global和static
global是函数内访问全局变量的前缀。全局变量就是在所有的括号外边定义的变量,全局可访问。
全局变量的访问有这么两种情况,第一是在函数内部的变量名前加上global关键字,像是global $x和$x很明显就不是一个东西,第二是可以通过访问$GLOBALS数组来访问全局变量,PHP所有的全局变量都放在了这里,以关联数组的方式来访问即可。
static是生存期在整个文件跑完销毁之前,里面的数据不会被抹掉。但是不是局部变量,总之全局变量和静态变量没有共同的地方,根本就是两个东西。
define 常量
简单来说define不是一个关键字,而是一个函数,定义了常量的名字和内容。常量的前面不能加$符号。
数值数组和关联数组的排序函数
sort()、rsort()、arsort()、krsort()、asort()、ksort()
简单来说带r的就是降序排序,带k的是对关联数组的键排序,带a的是对关联数组的值排序。
超级全局变量
这个最典型的就是$GLOBALS,还有其他的可能用的时候需要查一下
foreach
这个东西是只能拿来遍历数组的。
这个东西用数据模板,大概定义就是$array as $arrayKey=>$arrayName的格式,自己定义,然后再按照定义的模板访问访问,有时候不是关联数组,就不用键值格式的模板。
魔术常量
__FILE__、__LINE__、__DIR__、__FUNCTION__、__CLASS__、__TRAIT__、__METHOD__、__NAMESPACE__这几个量依据自己出现的位置不同而值不同,有的时候编程会比较方便,主要还是记一下功能。
OOP
特点是封装、继承、多态。
大多数面向对象的东西基本上感觉和Java是差不多的,像是只支持单继承,有接口等等。
但是PHP多了一个trait的继承。trait不能实例化,用use关键字引入,会覆盖基类的继承方法或属性,以及可以多继承等等。感觉像个变了个样子的interface,但是PHP本身就有interface,就很乱。
final关键字也是有的,功能差不多,不接受函数/类的重写之类的。
调用父类的构造方法基本上也是parent::__construct()这个样子。
做题学到的知识
-
自己定义的函数名字PHP对大小不敏感,定义成
FUNCTION FUN()这种鬼样子照样可以用fun()来调用。 -
PHP除了可以用C++的两种注释方式外,shell的#注释也是可以使用的。
-
关联数组因为可以直接插值又可以指定下标插值,所以经常会出问下标这种题恶心人,最后一个直接插值的找前面的指定下标插值的最大下标,肯定是比这个值大的,具体大几就要看最后直接插值插了几个了。
-
空数组会转化成null,在一些判断结构里老是坑人。
-
三元运算符
?:别被绕晕了,就是从左向右运算,?前的一定是个bool运算式,别看见了一脸蒙就行。 -
数值字符串比较按整数处理。
-
有时候一些奇奇怪怪的东西会当关联数组的下标,像是null,true,false等,null等价成’‘,true等价成1,false等价成0,有的题很坏,拿这些混淆视听,问你有几个下标,其心可诛。
-
个人测试,单引号字符串不能识别
\n标识,只会当字符显示出来,但是\\却能识别成一个反斜杠,太离谱了。 -
关于
headers_list()和headers_sent()的区别,请看下图:

-
include引入文件好几次也不会报错的。
-
upload_max_file_size默认2M
-
其他零零碎碎的东西:
trim()移除字符串两侧字符
rand()
array_slice()
isset()检查变量
fread()文件读取
is_a()对象类型判断
get_parent_class()
prev()
header()向客户端发送原始的HTTP报头
eregi()搜索指定模式字符串,不分大小写
glob()返回匹配指定模式的文件名或目录
memory_get_usage
gzcompress()
strtoupper()
session() 1440s
使用父方法调用方法时应该使用对静态方法的静态引用
结语
东西有太多零碎的东西了,最后一部分等我抽时间补完,主要是有些自带函数平时用的少。难顶。