用于PHP的StringBuilder

用于PHP的StringBuilder,php,stringbuilder,Php,Stringbuilder,是否有人在PHP中实现了StringBuilder 您可以使用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 monke

是否有人在PHP中实现了
StringBuilder

您可以使用
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);
尽管我很喜欢雅各布回答的表情:)

看看t的强大功能 他的功能和它的姐妹功能在这里: 注意:

这个答案是从2010年开始的,现在可能有stringbuilders可以改进性能(从下面的评论判断)。我已经很长时间没有使用php了,所以我的知识不是最新的。这个答案可能过时了

下面的问题也可能提供有趣的信息,他们的结论似乎都是一样的


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

就像这样构建字符串

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

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

您不需要PHP中的StringBuilder或StringBuffer,我为您提供的PHP非常方便,如果您希望保留PyString,请使用hereDoc和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;
$YourString=“开始”;

$YourString.=对@Amir的回答启发了我,在PHP中,如果想要“命名参数”或“位置”参数,就不需要
sprintf
,但这里的\u DOC/NOW\u 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
class-MyClass{
私人财产;
private$stock;//其他具有getter“getSomeProperty()”的对象
函数u_toString(){
$localvar='localvar';
$localvar2='localvar2';
返回属性},
localvar:{$localvar},
localvar2:$localvar2
}}
这是你的文件;
}//结束uuu toString()
}//结束MyClass

你为什么想要这样的东西?相关的:(许多答案确实不需要这样一个类,但都有很好的理由)你不需要PHP中的StringBuilder,请参阅我的答案:@Webnet很好,它适用于其他地方定义的字符串(例如翻译文件中的字符串)。否则它只会变成一个神奇的字符串(与a的概念相同)。L18n正是此函数的最佳用途,也是其用于字符转换的姊妹函数:
printf(“char 65=%c”,65)
我会+1,但是串联运算符是
=
,而不是
+=
+=
用于加法,这是与串联不同的运算符)…哎呀,感谢您指出这一点。非常习惯java:P。现在修复了它。是的,这是一个痛苦:P。每次我切换到php时,这个错误都会让我发疯。这太天真了。你不能肯定这一点;因为您需要熟悉php内部数据结构。我没有看到源代码,是吗?请注意,PHP中的字符串在任何方面都不如字符串缓冲区快。根据您的回答,我建议在HERE\u DOC/NOW\u DOC块中使用变量和类字段。