web-dev-qa-db-ja.com

中括弧を使用するか、文字列内で変数を連結する必要がありますか?

文字列内の変数を連結したり、代わりに中括弧を使用したりすることには、利点または欠点がありますか?

連結:

$greeting = "Welcome, " . $name . "!";

中括弧:

$greeting = "Welcome, {$name}!";

EStudio を使用しているため、個人的には常に文字列を連結してきました。連結すると、PHP変数が異なる色で強調表示されます。ただし、変数が壊れていますが、そうではありません。長い文字列でPHP変数などを見つけやすくなるだけです。

人々はSQLについてこれを混乱させています。これはではありませんこの質問についてです。混乱を避けるためにサンプルを更新しました。

46

出力を見ると、以下のすべてが同じです。

  1. $greeting = "Welcome, " . $name . "!";
  2. $greeting = 'Welcome, ' . $name . '!';
  3. $greeting = "Welcome, $name!";
  4. $greeting = "Welcome, {$name}!";

オプション1を使用してはならず、代わりにオプション2を使用してください。オプション3と4はどちらも同じです。単純な変数の場合、中括弧はオプションです。ただし、配列要素を使用している場合は、中括弧を使用する必要があります。例:$greeting = "Welcome, {$user['name']}!";。したがって、標準では、変数補間が使用される場合は、連結ではなく中括弧が使用されます。

ただし、タブ(\t)、改行(\n)を使用する場合は、二重引用符で囲む必要があります。

一般に、変数の補間は低速ですが、変数が多すぎて連結できない場合は、連結も遅くなる可能性があります。したがって、他の文字間の変数の数に応じて決定します。

45
Amil Waduwawara

インジェクション攻撃(SQLiを含む)は扱っていませんが、特にPHP devs-最初に上記の手法を使用せずに使用している場合エンコードと検証)すべての入力は、注入ベースの攻撃につながります。

セキュリティ要件を遵守するためにすべてのコードをやり直す必要があるときではなく、コーディングの最初にセキュリティを覚えておくことが重要です。または、最終的にこの ""対ウォーダウンを取得し、すべての入力を適切にエンコードおよび検証せずにいずれかの手法を使用してXSSの影響を受けやすいため、問題がないことを理解した場合。

  1. エンコードurlencode()またはhtmlenities()を使用して入力を正規化します。
  2. 文字列以外のデータ型指定[〜#〜] or [〜#〜]辞書検索および/または文字列の正規表現validateを使用します。
  3. 利益?

コンパイル済みPHP(バイトコードキャッシュ)の場合、違いはありません。

この機能にはPHP 5.5(Zend Optimizer +))が付属しています。

2
alexwenzel