用于PHP的StringBuilder
是否有人在PHP中实现了用于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
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块中使用变量和类字段。