web-dev-qa-db-ja.com

PHP - 文字列に変数を連結するか直接挿入する

私は疑問に思っている、PHP変数を文字列に挿入するための適切な方法は何ですか?

このように:

echo "Welcome ".$name."!"

またはこのように:

echo "Welcome $name!"

これらの方法は両方とも私のPHP v5.3.5で機能します。後者はより短くより単純ですが、最初のものがより良いフォーマットであるのか、それともより適切であると認められるのか私にはわかりません。

194
Web_Designer

これら2つの構文の間で、あなたは本当にあなたが望むものを選ぶべきです:-)

個人的には、私はこのような場合(変数補間)にあなたの2番目の解決策をとるでしょう。

結果は同じになります。パフォーマンスへの影響があっても、それは問題になりません 1


傍注として、私の答えはもう少し完成したものです。

echo "Welcome $names!";

PHPは、$names変数を使用しようとしているかのようにコードを解釈します - これは存在しません。

その日は{}を使う必要があります。

echo "Welcome {$name}s!"

連結にフォールバックする必要はありません。


また、最初の構文に注意してください。

echo "Welcome ".$name."!";

連結を避けて、最適化される可能性があります。

echo "Welcome ", $name, "!";

(ただし、前述したように、これはあまり関係ありません...)


1 - あなたが何十万もの連鎖対補間をしていない限り - そしてそれはおそらくそうではありません。

305
Pascal MARTIN

二重引用符で囲まれた文字列は、変数を挿入する必要があるたびに文字列を分割する必要がないため、より洗練されています(一重引用符で囲まれた文字列の場合と同様)。

ただし、関数の戻り値を挿入する必要がある場合は、括弧で囲んでも、二重引用符で囲まれた文字列に挿入することはできません。

//syntax error!!
//$s = "Hello {trim($world)}!"

//the only option
$s = "Hello " . trim($world) . "!";
16
Michael

Php4以降、文字列フォーマッタを使うことができます。

$num = 5;
$Word = 'banana';
$format = 'can you say %d times the Word %s';
echo sprintf($format, $num, $Word);

出典: sprintf()

8
Olivier Royo

どちらでも構いません。より見やすいものを使用してください。そして可視性について言えば、 printf をチェックすることもできます。

6

私はこの質問にすでに選ばれた答えがあることを知っています、しかし私は この記事 が文字列補間が連結より速く働くことを明らかに示しているのを見つけました。まだ疑わしい人には役に立つかもしれません。

5
Denis V

考えさせるシンプル読みやすくする一貫性のあるわかりやすい(パフォーマンスはここでは関係ないため):

  • 二重引用符で埋め込み変数を使用すると、オブジェクトのプロパティ、多次元配列などを埋め込む場合に複雑で混乱しやすい状況になる可能性があります。つまり、通常、埋め込み変数を読み取るとき。

  • {}\のような松葉杖を追加する必要があることがよくあります。IMOは混乱を招き、連結の読みやすさをほぼ同等にしますが、それ以上ではありません。

  • たとえばhtmlspecialchars($var)のように、varの周囲に関数呼び出しをラップする必要があるとすぐに、連結に切り替える必要があります。

  • 残念ながら、定数を埋め込むことはできません。

場合によっては、 "varsを埋め込んだ二重引用符"が便利ですが、一般的に言って、連結を使用します(一重引用符または二重引用符を使用する場合)。便利)

4
Frosty Z

最初のものに行き、一重引用符を使ってください。

  1. 読みやすく、他のプログラマは何が起こっているのか知っているでしょう
  2. PHPがソースコードを解析したときのオペコードの作成方法は少し速くなりますが、基本的にそれをやることになるので、手助けをしてください!
  3. 二重引用符の代わりに一重引用符も使用すると、パフォーマンスがさらに向上します。

二重引用符を使用する必要があるのは、\r\n\tが必要な場合だけです。オーバーヘッドは、他の場合に使用する価値がないだけです。

ベンチマークについては、 PHP変数の連結phpbench.com も確認してください。物事のさまざまな方法で。

3
Khez

それは味の問題だけです。
あなたが望むものは何でも使ってください。

ほとんどの場合、2番目のものを使用していますが、それは異なります。

文字列内の変数をハイライト表示する優れたエディタを自分で作ることもお勧めします。

2

連結しないでください。エコーは複数のパラメータを取ることができるので、必要ありません。

echo "Welcome ", $name, "!";

一重引用符または二重引用符の使用に関しては、違いはごくわずかです。自分でテストするために、多数の文字列でテストを実行できます。

2
David Gillen

あなたは最初のものを選ぶべきです。最初のパフォーマンスが2番目のパフォーマンスと比較して速いということ以外は違いはありません。

二重引用符内の変数PHPが変数の解析に時間がかかる場合。

これをチェックしてください 変数連結のための一重引用符または二重引用符?

これは別の例です phpにパフォーマンス上の利点としてシングルクォートとダブルクォートがありますか?

上記のリンクのこの回答が支持された理由や、この回答が支持されなかった理由はわかりませんでした。

私が同じことを言ったように。

こちらもご覧になれます

PHPでは、一重引用符または二重引用符のほうが速いですか?

1
Shakti Singh

SQLコマンドを実行したいが変数が配列のメンバーである場合は、arrayの[]の内側に一重引用符を使用しないでください([''])。たとえば、この文字列をSQLコマンドとして使用すると、server error 500になります。

$con = mysqli_connect('ServerName', 'dbUsername', 'dbPassword');
mysqli_select_db($con, 'dbName')

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray['TraceNo']')";
mysqli_query($con, $sql)

正しい文字列は次のとおりです。

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray[TraceNo]')";
1
Hamid Araghi

私はこれが古い質問であることを知っています、しかし私は誰かがすべての賛否両論を述べなければならないと思います:

より良い構文:それは個人的な好みです。

パフォーマンス:違いはありません。多くの人が述べたように、非現実的に多くの変数を使うと二重引用符のほうが速いかもしれません。

使い方の改善:一重引用符(ほとんど)。 @Khezが言ったように、一重引用符を使えば、echo 'hi ' . trim($name) . ($i + 1);のように、関数呼び出しや変数変更でさえも、何でも連結できます。二重引用符で一重引用符でできないことができるのは、\n\r\tなどの使用法だけです。

読みやすさ:違いはありません(個人的な好みがある場合があります)。

書き込み可能性/再書き込み可能性/デバッグ:1行のステートメントでは違いはありませんが、複数行を扱う場合は、行のコメント/コメント解除が簡単です。デバッグ中または書き込み中例えば:

$q = 'SELECT ' .
     't1.col1 ' .
     ',t2.col2 ' .
   //',t3.col3 ' .
     'FROM tbl1 AS t1 ' .
     'LEFT JOIN tbl2 AS t2 ON t2.col2 = t1.col1 ' .
   //'LEFT JOIN tbl3 AS t3 ON t3.col3 = t2.col2 ' .
     'WHERE t1.col1 = ' . $x . ' ' .
     '  AND t2.col2 = ' . $y . ' ' .
   //'  AND t3.col3 = ' . $z . ' ' .
     'ORDER BY t1.col1 ASC ' .
     'LIMIT 10';

少ないエスケープ:一重引用符。一重引用符では、2文字だけをエスケープする必要があります('\)。二重引用符を使用するには、2文字("\)および必要に応じてさらに3文字(${および})をエスケープする必要があります。

少ない変更:一重引用符。たとえば、次のようなコードがあるとします。

echo 'Number ' . $i . '!';

そして、あなたは1を$ iに増やす必要があるので、それは好きになります:

echo 'Number ' . ($i + 1) . '!';

しかし、二重引用符では、これを変更する必要があります。

echo "Number $i!";

これに:

echo "Number " . ($i + 1) . "!";

結論好きなものを使ってください

0
evilReiko