単純な答えは明らかに弱いです。 今日は、一重引用符と二重引用符の違いは何なのか、どちらが速くてどちらが遅いのかを確認する実験を行います。
テスト コードは次のとおりです:
コードをコピー コードは次のとおりです:
$single_quotes = 'これは文字列です';
$double_quotes = "これは文字列です";
echo $single_quotes
$var = '文字列'; 🎜>$single_quotes_var = 'これは '.$var;
$double_quotes_var = "これは $var"; ';
$single_quotes_var_pre = $var は文字列です';
$single_quotes_var_pre;
echo $double_quotes_var_pre; ;
次に、前の記事で説明したオペコード ジェネレーターを見て、コードが最終的にどのように実行されるかを見てみましょう:
コードをコピー
位置 0 からの分岐分析 見つかったものを返す ファイル名: /home/xinchen/string.php 関数名: ( null) 演算数: 24
コンパイル済み変数: !0 = $single_quotes、!1 = $double_quotes、!2 = $var、!3 = $single_quotes_var、!4 = $double_quotes_var、!5 = $ single_quotes_var_pre, ! 6 = $double_quotes_var_pre行番号 op fetch ext return オペランド
---------------------------- --- ---------------------------------------------------
2 0 ASSIGN !0, 'これは文字列です'
3 1 ASSIGN !1, 'これは文字列です'
4 2 ECHO !0
5 3 ECHO !1
7 4 ASSIGN !2 , '文字列'
8 5 CONCAT ~3 'これは ', !2
6 ASSIGN !3, ~3
9 7 INIT_STRING ~5
8 ADD_STRING ~5 ~ 5, 'これは '
9 ADD_VAR ~5 ~5, !2
10 ASSIGN !4, ~5
11 11 ECHO !3
12 12 ECHO !4
14 13 ASSIGN !2, 'これ'
16 14 CONCAT ~8 !2, ' は文字列です'
15 ASSIGN !5, ~8
17 16 INIT_STRING ~10
17 ADD_VAR ~10 ~10 , !2
18 ADD_STRING ~10 ~10, ' は文字列です'
19 ASSIGN !6, ~10
19 20 ECHO !5
20 21 ECHO !6
22 22 RETURN 1
23* ZEND_HANDLE_EXCEPTION
0 行目から 3 行目までの op 行に注目してください。変数置換を使用しない場合、二重引用符と単一引用符によって生成されるオペコードは同じであることがわかります。
項目 4 から 12 をもう一度見てみると、変数置換を使用する場合、二重引用符と一重引用符を使用して生成されるオペコードが異なることがわかります。二重引用符の場合のオペコードを分析してみましょう。
7 INIT_STRING が初期化されます。文字列変数を作成し、それを最大 5 つの一時変数に保存します。
8 ADD_STRING は文字列の最初の部分を書き込みます。
9 ADD_VAR は、変数で置き換えられた文字列を書き込みます。
16~28行目も同様です。