53

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

連結:

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

中括弧:

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

個人的には、私はUEStudioを使用しているため、常に文字列を連結してきました。連結すると、PHP 変数が別の色で強調表示されます。ただし、変数が分割されていない場合は、分割されません。長い文字列などで PHP 変数を見つけやすくするだけです。

人々はこれが SQL に関するものであると混乱しています。これは 、この質問に関するものではありません。 混乱を避けるために、例を更新しました。

4

3 に答える 3

57

出力を見ると、以下のすべてが同じことを行います。

  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を使用する場合は、二重引用符で囲む必要があります。

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

于 2011-01-13T04:31:36.380 に答える
3

インジェクション攻撃 (SQLi を含む) を扱うわけではありませんが、すべての入力を最初にエンコードおよび検証せずに上記の手法を使用すると、インジェクション ベースの攻撃につながることに少なくとも注意する必要があります (特に PHP 開発者の場合)。

セキュリティ要件に準拠するためにすべてのコードをやり直す必要がある最後ではなく、コーディングの最初にセキュリティを覚えておくことが重要です。または、最終的にこの dang " vs. ' war down を取得し、すべての入力を適切にエンコードおよび検証せずにいずれかの手法を使用して XSS の影響を受けやすいため、問題ではないことに気付きます。

  1. urlencode()またはhtmlenities()を使用してエンコードし、入力を正規化します。
  2. 検証する文字列には、非文字列OR辞書検索および/または正規表現のデータ型指定を使用します。
  3. 利益?
于 2011-12-20T16:59:36.537 に答える
3

事前にコンパイルされた PHP (Bytecode Cache) では違いはありません。

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

于 2015-05-07T12:45:39.270 に答える