如果想观感更好看到图片,可以去我的gitbook或者github去看
github:https://github.com/kakaandhanhan/cybersecurity_knowledge_book-gitbook.22kaka.fun
gitbook:http://22kaka.fun
description: 专门出的关于php的特性比较,后面好像也有java的特性。
🏀 PHP特性知识点总结
(1)类型转换
之前提到过的是字符串转为整型。其实php手册里面提到了各种类型的转换。先把他放在这里。
https://www.php.net/manual/zh/language.types.type-juggling.php#language.types.typecasting
我们按照php手册上的顺序来介绍,只介绍几个比较常用的。
①转化为bool
②转化为整型int
0x01:从bool转换为int
false为0,true为1
0x02:从float转换为int
向下取整(直接舍去小数位)
0x03:从string转换为int
如果 string 是 numeric(数字字符串) 或者前导数字, 则将它解析为相应的 int 值,否则将转换为零(0
)
数字字符串:
这只是一个字符串,其开头类似于数字字符串,后跟任何字符。但是如果含 e 的字符串转换成 int 类型时会被当做科学计数法处理,123e456
表示 123 的 456 次方。
0x04:从null转换为int
为0
③转换为float
0x01:从string转换为float
如果 string 是 numeric(数字字符串) 或者前导数字, 则将它解析为相应的 int 值,否则将转换为零(0
)
0x02:其他类型转换为float
先将其他类型转换为int,再由int转换为float。(而其他类型转换为float,就在上面的②)
(2)与=
== 弱类型比较, 仅要求两边变量类型转换后的值相等
=== 强类型比较, 不仅要求两个变量的值相等, 还要求变量的类型相同
同理 != 是弱类型比较, 而 !== 是强类型比较
(3)intval()函数绕过
首先我们去php手册了解这是什么东西。
intval()
获取变量的整数值。下面的base是转换的进制,默认是0
intval(mixed $value, int $base = 10): int
intval主要利用有三个。
①特性一:返回值
这个重点在非空的数组会返回1。
这里想提醒一下['']
这个不是数组为空,这个数组有一个元素,元素为空元素。要是[]
才是空数组
②特性二:base转化的进制
前提是base是0的时候,由value来决定。其他几个情况比较熟悉,0开头是8进制需要好好记忆一下。
③特性三:弱类型比较下的base转换开始和结束
这个是说在弱类型比较的前提下,本来在base=0的情况下,要看value的结果来判断,这个判断是从数字或者正负号开始才做转换,直到遇到非数字,或者字符串的结束符(\0)结束转换。开始我还理解错了。这句话的意思是比如我们要得到带4476的字符串,应该是4476abc这种。不然以abc4476是被转换为0的。
④不影响结果的在开头的元素
空格和+(表示正号)
(4)preg_match()函数绕过
preg_match():
执行匹配正则表达式preg_match(string $pattern,string $subject,array &$matches = null,int $flags = 0,int $offset = 0 ): int|false
①特性一:传递数组
上面显示subject得是字符串,也就是说如果是数组,会返回false。
②特性二:换行符绕过
换行符这个大部分都只有一个,但是其实在做题之类的看到了两个。
1)/m
首先我们需要知道这个/m是什么
手册上太复杂了,所以我直接用自己的理解来理解吧。就是m代表multiline mode,是多行模式。这个多行模式是什么意思呢。