在 PHP 中,进行类型转换一般可以使用 intval(var) 函数,或者使用强制类型转换函数 (int) var 使用上这两个没有什么区别,唯一比较大的区别是 intval(var) 函数支持第二个参数 base 转化所使用的进制,但是一般使用过程中,这个参数用的很少。
但是在性能上,这两种方法有非常大的差别,经过测试,在 PHP 中使用 (int)var 进行类型转换时要比使用函数 intval( var) 大概快 3-6.5倍,下面是一个简单的测试:
输入 | (int)$val | intval($val) | 比较 | |
---|---|---|---|---|
#0 | 42 | 0.068180 | 0.448819 | 658% |
#1 | -42 | 0.067972 | 0.448907 | 660% |
#2 | 4.2 | 0.072348 | 0.450288 | 622% |
#3 | '42' | 0.087305 | 0.469350 | 537% |
#4 | ' 42' | 0.087590 | 0.471153 | 537% |
#5 | '-42' | 0.089154 | 0.469826 | 526% |
#6 | 34 | 0.068234 | 0.451035 | 661% |
#7 | '042' | 0.089344 | 0.470391 | 526% |
#8 | 0x1A | 0.072989 | 0.451909 | 619% |
#9 | '1e10' | 0.088196 | 0.469347 | 532% |
#10 | 26 | 0.068378 | 0.449884 | 657% |
#11 | 42000000 | 0.068770 | 0.449416 | 653% |
#12 | 2147483647 | 0.068927 | 0.448028 | 650% |
#13 | 2147483648 | 0.072599 | 0.450618 | 620% |
#14 | 4.2E 20 | 0.086305 | 0.467347 | 541% |
#15 | '420000000000000000000' | 0.102120 | 0.484245 | 474% |
#16 | array() | 0.092310 | 0.472185 | 511% |
#17 | array('foo','bar') | 0.112644 | 0.494482 | 438% |
PHP 的 intval()
, strval()
, floatval()
和 boolval()
来自 PHP 4 年代的函数,PHP 5 之后的版本有了强制类型转换函数(比如(int) $var
),经过上面测试,这些强制类型转换函数速度要快6倍。
所以 WordPress 5.6 把代码中的所有相关使用函数进行类型转换的代码都改成强制类型转换,据他们说一共改了 250 多个地方,哈哈。那我也改一下,WPJAM Basic 5.2 为了进一步提速,也会把所有使用到的类型转换函数,转换成强制类型转换。