是否有人在PHP中实现了StringBuilder
?
是否有人在PHP中实现了StringBuilder
?
注意:
此答案来源于2010年,现在可能已经有能够提高性能的字符串构建器(根据下面的评论判断)。我已经很长时间没有使用php了,所以我的知识已经不是最新的。这个答案可能已经过时。
以下问题也可能提供有趣的信息,尽管它们的结论似乎都是相同的。
php String Concatenation, Performance
为什么要使用StringBuilder?在php中,字符串是可变的。因此性能不是问题。
只需像这样构建字符串:
$string = "start";
$string .= "appended string";
$string .= "appended string";
etc.
.=
,而不是+=
(+=
用于加法,这是与连接不同的运算符)... - ircmaxellsprintf
,它是一个基本版本,但不需要额外的库。以下是示例:$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);
printf("char 65 = %c", 65);
- RobertPitt尽管有一些实现,但我不明白为什么你需要在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;
@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