有人在PHP中实现了StringBuilder
实现吗?
答案 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