誰かがStringBuilder
をPHPで実装しましたか?
注:
この答えは2010年のものです。今までにパフォーマンスを改善できる文字列ビルダーがあるかもしれません(以下のコメントから判断します)。私は長い間phpを使用していないため、私の知識は最新ではありません。この答えは時代遅れかもしれません。
StringBuilderを使用する理由は何ですか? PHPの文字列は変更可能です。したがって、パフォーマンスは問題になりません。
このような文字列を作成するだけです
$string = "start";
$string .= "appended string";
$string .= "appended string";
etc.
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);
しかし、私はジェイコブの答えの外観が好きです:)
ここで、この関数とその姉妹関数の優れた機能を見てみましょう: http://php.net/manual/en/function.sprintf.php
実装はいくつかありますが、少なくともパフォーマンス上の理由から、PHPでStringBuilderが必要になる理由はわかりません。 PHPでのプレーンな文字列の連結は、sprintfまたはJacobが示唆した要素よりも高速です。
PHP、PHPはPHP $ ===は非常に便利です。
$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は完璧に動作します偶数クラス内でこれを使用プロパティとゲッターを呼び出します。
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