PHP特性知识点总结


description: 专门出的关于php的特性比较,后面好像也有java的特性。

大家直接去我的gitbook或者github看就能看到图片,这里就懒得把他弄到csdn上了。
这里放github和gitbook的链接,大家跳转就可以。gitbook链接用国内的网就能访问。
gitbook: http://22kaka.fun
github:https://github.com/kakaandhanhan/cybersecurity_knowledge_book-gitbook.22kaka.fun

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是什么

手册上太复杂了,所以我直接用自己的理解来理

你可能感兴趣的:(GITBOOK,php,CTF,安全)