php字符串串联,性能

时间:2020-03-06 14:37:45  来源:igfitidea点击:

在Java和C#之类的语言中,字符串是不可变的,并且一次构建一个字符的字符串在计算上是昂贵的。在上述语言中,有一些库类可以降低这种开销,例如CSystem.Text.StringBuilder和Javajava.lang.StringBuilder

php(4或者5;我对两者都感兴趣)是否都共享此限制?如果是这样,是否有解决该问题的类似解决方案?

解决方案

在php中没有这样的限制,
php可以将strng与dot(。)运算符连接

$a="hello ";
$b="world";
echo $a.$b;

输出" hello world"

是的。他们是这样。例如,如果我们想将几个字符串一起回显,请使用

echo str1,str2,str3

代替

echo str1.str2.str3

使其更快一点。

不,在PHP中没有stringbuilder类的类型,因为字符串是可变的。

话虽如此,根据我们在做什么,有不同的方式来构建字符串。

例如,echo将接受逗号分隔的标记以进行输出。

// This...
echo 'one', 'two';

// Is the same as this
echo 'one';
echo 'two';

这意味着我们可以在不实际使用连接的情况下输出复杂的字符串,这会比较慢

// This...
echo 'one', 'two';

// Is faster than this...
echo 'one' . 'two';

如果需要在变量中捕获此输出,则可以使用输出缓冲功能来实现。

另外,PHP的数组性能非常好。如果要执行逗号分隔的值列表之类的操作,只需使用implode()

$values = array( 'one', 'two', 'three' );
$valueList = implode( ', ', $values );

最后,请确保我们熟悉PHP的字符串类型,它的不同定界符以及每个定界符的含义。

PHP字符串是可变的。我们可以像这样更改特定字符:

$string = 'abc';
$string[2] = 'a'; // $string equals 'aba'
$string[3] = 'd'; // $string equals 'abad'
$string[5] = 'e'; // $string equals 'abad e' (fills character(s) in between with spaces)

我们可以将字符追加到这样的字符串中:

$string .= 'a';

首先,如果我们不需要连接字符串,请不要这样做:这样做总是会更快

echo $a,$b,$c;

echo $a . $b . $c;

但是,至少在PHP5中,字符串连接确实非常快,尤其是在对给定字符串只有一个引用的情况下。我猜解释器在内部使用了类似StringBuilder的技术。

如果我们要在PHP字符串中放置变量值,我知道使用内联变量包含会更快一些(这不是我不记得它的正式名称)

$aString = 'oranges';
$compareString = "comparing apples to {$aString}!";
echo $compareString
   comparing apples to oranges!

必须在双引号内起作用。也适用于数组成员(即

echo "You requested page id {$_POST['id']}";

)

当我们进行定时比较时,差异是如此之小,以至于它们并不是很相关。从那以后,选择使代码更易于阅读和理解的内容将会更多。

我知道你在说什么我刚刚创建了一个简单的类来模拟Java StringBuilder类。

class StringBuilder {

  private $str = array();

  public function __construct() { }

  public function append($str) {
    $this->str[] = $str;
  }

  public function toString() {
    return implode($this->str);
  }

}