用于PHP的StringBuilder

时间:2010-11-18 18:29:02

标签: php stringbuilder

有人在PHP中实现了StringBuilder实现吗?

5 个答案:

答案 0 :(得分:92)

注意:

这个答案是从2010年开始,可能会有字符串制作者可以改善现在的表现(从下面的评论来看)。我已经很长时间没有使用php了,所以我的知识不是最新的。这个答案可能已过时了。


为什么要使用StringBuilder? php中的字符串是可变的。因此,性能不是问题。

只需像这样构建字符串

$string = "start";
$string .= "appended string";
$string .= "appended string";
etc.

答案 1 :(得分:6)

您可以使用sprintf,它只是一个基本版本,但不需要额外的库,示例请按

$String = "Firstname %s, lastname %s, Age %d";
echo sprintf($String,"Robert","Pitt",22);

还可以处理类型转换和位置替换:

$format = "The %2$s contains %1$d monkeys. That's a nice %2$s full of %1$d monkeys.";
sprintf($format, $num, $location);

虽然我喜欢jacob的回答:)

了解t的强大功能 他的功能和姐妹功能在这里: http://php.net/manual/en/function.sprintf.php

答案 2 :(得分:4)

有一些实现,但我不明白为什么你需要PHP中的StringBuilder,至少不是出于性能原因。 PHP中的纯字符串连接比sprintf或Jacob建议的强制要快。

答案 3 :(得分:2)

你不需要在PHP中使用StringBuilder或StringBuffer,如果你想保留PyString,PHP可以使用fromDoc和NowDoc,非常方便:

$YourString = "start";
$YourString .= <<<'EOD'

appended string
Example of string
spanning multiple lines
using nowdoc syntax.

EOD;

$YourString .= <<<buffer

appended string
Example of string
spanning multiple lines
using heredoc syntax.

appended string

appended string

buffer;

答案 4 :(得分:1)

@Amir的答案,给了我灵感,在PHP中,如果你想要'命名参数'或'位置'参数,你不需要sprintf,但HERE_DOC / NOW_DOC是完美的。你可以甚至 在类中使用它来获取属性并调用getter。

class MyClass{

     private $property;

     private $stock; // some other object with getter 'getSomeProperty()'

     function __toString(){

         $localvar = 'Localvar';
         $localvar2 = 'Localvar2';
         return <<<HERE_DOC
           {{ 
              fqsn: {$this->stock->getSomeProperty()},
              property: {$this->property},
              localvar: {$localvar},
              localvar2: $localvar2
           }}
HERE_DOC;
      } // end __toString()
 } // end MyClass