Cod*_*ter 23
http://www.php.net/manual/en/language.types.string.php#language.types.string.casting
可以使用(string)强制转换或strval()函数将值转换为字符串.
看起来和我一样.
它们通常可以互换,因为 PHP 使用自动类型转换,并且变量的类型由使用变量的上下文确定。
一些区别是strval($var)
将返回字符串值,$var
而在评估期间(string)$var
显式转换“类型” $var
。
此外,从手册中strval()
:
$var
可以是任何标量类型或实现该__toString
方法的对象。您不能strval()
在未实现该__toString
方法的数组或对象上使用。
正如@Lars 所提到的,(string)
通常更快。
我不确定这如何适用于不同版本的 PHP,但是当查看生成的操作码时,两个变体都会生成相同的操作码,因此执行完全相同。
输入:
<?php
function s1(int $val) {
return (string)$val;
}
function s2(int $val) {
return strval($val);
}
Run Code Online (Sandbox Code Playgroud)
由https://3v4l.org/3gFWj/vld#output生成的输出
Function s1:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename: /in/3gFWj
function name: s1
number of ops: 4
compiled vars: !0 = $val
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------------------
2 0 E > RECV !0
3 1 MAKE_REF ~1 !0
2 > RETURN ~1
4 3* > RETURN null
End of function s1
Function s2:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename: /in/3gFWj
function name: s2
number of ops: 4
compiled vars: !0 = $val
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------------------
5 0 E > RECV !0
6 1 MAKE_REF ~1 !0
2 > RETURN ~1
7 3* > RETURN null
End of function s2
Run Code Online (Sandbox Code Playgroud)
一个是函数调用,另一个是内部类型转换.如果没有检查,我猜测后者会在几个周期内更快,但不应该真正有所作为.
归档时间: |
|
查看次数: |
11218 次 |
最近记录: |