1

ささいな質問かもしれませんが、次の PHP コードを考えてみてください。

$a = "foo1"; $b = "foo2"; $c = "foo3";

echo $a, $b, $c;

echo $a . $b . $c;

echo "$a$b$c";

これらの 3 つのステートメントは同等ではありません。違いは何ですか。どちらを使用するか決められない場合はどうすればよいでしょうか?

4

3 に答える 3

6

最初のものは、1 回の呼び出しで 3 つの値をエコーアウトするだけです。他の 2 つは文字列連結を行い、その操作の結果を出力します。つまり、これを数十億回続けて実行した場合、最初のバージョンの方が文字列操作が少ないため、おそらくわずかに高速になります。

そうは言っても、PHP で文字列操作を減らしても、echo ステートメントによって生成された出力は出力バッファーの最後に追加されます。単一の大きな文字列に詰め込む方が、複数の小さな文字列よりも効率的です。

大まかに言えば、これらのバージョンの違いはほとんどないので、自分にとって最も理にかなっていて、今後のメンテナンスが最も簡単なバージョンを使用してください。

于 2012-07-09T19:56:39.770 に答える
0

それらはほとんど同等です。唯一の本当の違いは、実行方法のパフォーマンスにあると思います。PHP オプティマイザを使用すると、これは重要でないか、存在しなくなる可能性があります。

推測すると、エコー #1 が最も速く、次にエコー #2、最後にエコー #3 となります。

なぜ私はこれを言うのですか?:

echo #1: そのままの言語構造をそのまま再生し、単純に変数を吐き出します。

echo #2: 最初に文字列を連結してからエコーアウトする必要があります

echo #3: 最初に文字列を検索し、見つかったものを変数に置き換える必要があります。これは、処理するのに最もコストのかかる操作である可能性が最も高いでしょう。

追記:文字列を変数に入れるときは、内部で変数を明示的に置き換えたい場合を除き 、常に一重引用符を使用する必要があります。したがって、最初の行:

$a = "foo1"; $b = "foo2"; $c = "foo3";

次のようにする必要があります。

$a = 'foo1'; $b = 'foo2'; $c = 'foo3';
于 2012-07-09T20:04:28.250 に答える
0

3番目の方法についてのメモ:

二重引用符で変数を使用する場合、配列ベースの変数をエスケープするため、中括弧を使用する習慣があります。

echo "{$a}{$b}{$c}";

$c連想配列で、その一部の要素を出力したい場合、ステートメントは次のようになります。

echo "{$a}{$b}{$c['foo']}";

これにより、変数と文字列を連結して出力​​するよりも、文字列の書式設定がきれいになる場合があります。

于 2012-07-09T20:05:47.583 に答える