我应该使用Php string cast vs strval函数?

时间:2011-09-10 13:26:10

标签: php string

在php中执行字符串转换和strval有什么区别?

  1. strval($value);

  2. (string)$value;

6 个答案:

答案 0 :(得分:21)

http://www.php.net/manual/en/language.types.string.php#language.types.string.casting

  

可以使用(string)强制转换或strval()函数将值转换为字符串。

对我来说也一样。

答案 1 :(得分:5)

一个是函数调用,另一个是内部类型转换。如果没有检查过,我猜测后者会在几个周期内更快,但不应该真正有所作为。

答案 2 :(得分:4)

它们通常是可互换的,因为PHP使用自动类型转换,变量的类型由使用变量的上下文决定。

有些不同之处在于strval($var)将返回$var的字符串值,而(string)$var在评估过程中明确转换$var的“类型”。

此外,来自strval()的{​​{3}}:

  

$var可以是任何标量类型或实现__toString方法的对象。您不能在数组或未实现strval()方法的对象上使用__toString

正如@Lars所提到的(string)通常更快。

答案 3 :(得分:0)

晚了聚会,但是据PHPstorm PR_DEPTH更快

(string) is faster

答案 4 :(得分:0)

我不确定这如何适用于各种版本的 PHP,但是在查看生成的操作码时,两个变体生成相同的操作码,因此执行完全相同。

输入:

<?php
function s1(int $val) {
    return (string)$val;
}
function s2(int $val) {
    return strval($val);
}

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

答案 5 :(得分:0)

使用 strval() 比使用 (string) 有一个优势,即我们可以使用 strval 作为回调函数,这是我们无法使用 (string) 做的。

$arr = [1, 2, 3];
echo(json_encode($arr)); // [1,2,3]
$arr = array_map('strval', $arr);
echo(json_encode($arr)); // ["1","2","3"]