PHP変数を文字列に挿入する適切な方法は何ですか?
こちらです:
echo "Welcome ".$name."!"
またはこのように:
echo "Welcome $name!"
これらの方法はどちらもmyで機能しますPHP v5.3.5
。後者の方が短くて簡単ですが、最初の方がフォーマットが優れているのか、それとも適切なものとして受け入れられているのかわかりません。
PHP変数を文字列に挿入する適切な方法は何ですか?
こちらです:
echo "Welcome ".$name."!"
またはこのように:
echo "Welcome $name!"
これらの方法はどちらもmyで機能しますPHP v5.3.5
。後者の方が短くて簡単ですが、最初の方がフォーマットが優れているのか、それとも適切なものとして受け入れられているのかわかりません。
回答:
これらの2つの構文の間で、実際に使用する構文を選択する必要があります:-)
個人的には、そのような場合(変数補間)の 2番目のソリューションを使用します。
結果は同じになります。パフォーマンスに影響がある場合でも、問題にはなりません1。
補足として、私の答えはもう少し完全です:このようなことをしたい日:
echo "Welcome $names!";
PHPは、$names
変数を使用しようとしているかのようにコードを解釈します-変数は存在しません。-文字列に「」ではなく「」を使用した場合にのみ機能することに注意してください。
その日、あなたは使う必要があります{}
:
echo "Welcome {$name}s!"
連結にフォールバックする必要はありません。
また、最初の構文は次のとおりです。
echo "Welcome ".$name."!";
おそらく、以下を使用して、連結を避けて最適化できます。
echo "Welcome ", $name, "!";
(しかし、以前に言ったように、これはそれほど重要ではありません...)
1-何十万もの連結対補間を実行している場合を除いて-そして、それはおそらくまったくそうではありません。
{}
。を使用する必要がある場合に、変数を残りの文字列から分離する方法を知ることができてとても感謝しています。
echo
、他の場所では機能しないことに注意してください。
time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = $string.$i; } print("Done!\n");'
連結)は実際には約300ミリ秒の時間で失われます(200.000アイテムの場合、これはセットの1000要素あたり1 miliseconfです...)。これは統計上のノイズであり、違いを測定することさえ不可能です。より読みやすいことを考えると、time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = "{$string}{$i}"; } print("Done!\n");'
(補間)は誰もが認める勝者です...
変数を挿入する必要があるたびに文字列を分割する必要がないため、二重引用符で囲まれた文字列はよりエレガントです(単一引用符で囲まれた文字列で行う必要があるように)。
ただし、関数の戻り値を挿入する必要がある場合は、二重引用符で囲まれた文字列に挿入することはできません。
//syntax error!!
//$s = "Hello {trim($world)}!"
//the only option
$s = "Hello " . trim($world) . "!";
$x = function() { ...}; $string = "hello {$x(blah blah blah)}"
「制限」を回避します。
$x = 'trim'; $string = "hello {$x('blah blah blah')}";
$s = 'Hello ' . trim($world) .'!';
文字列に補間するものが何もない場合は、単一引用符を使用してみてください。これによりパフォーマンスが向上し、両方を識別するための規則として使用できます
php4以降、文字列フォーマッタを使用できます:
$num = 5;
$word = 'banana';
$format = 'can you say %d times the word %s';
echo sprintf($format, $num, $word);
ソース:sprintf()
どちらでもかまいません。見やすい方を使用してください。また、可視性について言えば、printfも確認できます。
作成の観点から考えると、シンプルで読みやすく、一貫性があり、理解しやすいと思います(ここではパフォーマンスは問題ではないため)。
埋め込まれた変数を二重引用符で使用すると、オブジェクトのプロパティや多次元配列などを埋め込むときに、複雑で混乱を招く可能性があります。つまり、一般に、埋め込まれた変数を読み取る場合、読み取っている最終的な動作を100%確実に確認することはできません。 。
{}
and などの松葉杖を追加する必要が頻繁にあり\
、IMOは混乱を招き、連結の読みやすさをほぼ同等にします。
たとえばhtmlspecialchars($var)
、varの周りに関数呼び出しをラップする必要があるとすぐに、連結に切り替える必要があります。
私の知る限り、定数を埋め込むことはできません。
いくつかの特定のケースでは、 "vars埋め込みの二重引用符"が役立つ場合がありますが、一般的に言えば、連結します(便利な場合は単一引用符または二重引用符を使用します)。
最初のものを使用して、単一引用符を使用してください!
あなたが必要なときは、二重引用符を使用する必要がある唯一の状況は、あります\r
、\n
、\t
!オーバーヘッドは、他のケースで使用する価値はありません。
また、チェックする必要がありますPHPの変数の連結、phpbench.comを物事の異なる方法にいくつかのベンチマークのために。
\r
は良い点で\n
あり\t
、他の回答にはこのビットは含まれていませんでした。
それは好みの問題だけです。
好きなように使ってください。
ほとんどの場合、2番目のものを使用していますが、状況によって異なります。
文字列内の変数を強調表示する優れたエディターを入手することもお勧めします
あなたは最初のものを選ぶべきです。最初のパフォーマンスが2番目のパフォーマンスよりも高速になることを除いて、違いはありません。
二重引用符で囲まれたPHPの変数が変数の解析に時間がかかる場合。
変数の連結については、この単一引用符または二重引用符を確認してください。
これは別の例ですphpにはパフォーマンス上の利点シングルクォートとダブルクォートがありますか?
上のリンクのこの回答がなぜ賛成票を投じられるのか、なぜこの回答が反対票を投じるのか理解できませんでした。
私が同じことを言ったように。
こちらもご覧になれます
SQL
コマンドを実行する必要があり、変数が配列メンバーである場合は[]
、配列内で単一引用符を使用しないでください(次のように['']
)。たとえば、この文字列を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]')";
私はこれが古い質問であることを知っていますが、誰かがすべての長所と短所について言及しなければならないと思います:
より良い構文:それは個人的な好みです。
パフォーマンス:違いはありません。多くの人が述べたように、非現実的に多くの変数を使用する場合は、二重引用符の方が速い場合があります。
より良い使用法:単一引用符(ほとんど)。@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) . "!";
結論:好きなものを使用してください。
echo 'Welcome '.$name.'!';