ホームページ >php教程 >php手册 >PHP 一重引用符と二重引用符の文字列の効率

PHP 一重引用符と二重引用符の文字列の効率

WBOY
WBOYオリジナル
2016-06-13 12:24:07914ブラウズ

単純な答えは明らかに弱いです。 今日は、一重引用符と二重引用符の違いは何なのか、どちらが速くてどちらが遅いのかを確認する実験を行います。
テスト コードは次のとおりです:

コードをコピー コードは次のとおりです:


$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行目も同様です。


ここから、二重引用符を使用した場合と一重引用符を使用した場合では、同じロジックで経験される実行が実際に異なることがわかります (オペコードは PHP 実行コードにとって最終的なものであるため)。生成された Opcod の数だけでも、一重引用符を使用した方が高速であることを証明するのに十分です。

コンパイル段階と同様に、二重引用符と一重引用符の違いも非常に大きいので、数字を挙げて説明します。スキャン段階では、二重引用符には 14 の語彙規則があります。一重引用符は 6 つの項目しかありません。

はは、この分析を経て、今後は一重引用符と二重引用符の使い方がより明確に理解できるようになりますか?
ところで、変数置換を必要としない純粋な文字列の場合、C/C では二重引用符が文字列を表すことは誰もが知っているため、この場合は二重引用符を使用する方が適切です。
さらに、W3C 標準によれば、HTML 内の属性値は二重引用符で囲む必要があるため、一重引用符に慣れてあらゆる場所で一重引用符を乱用しないでください。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。