ホームページ  >  記事  >  バックエンド開発  >  PHP の単一引用符と二重引用符 文字列効率_PHP チュートリアル

PHP の単一引用符と二重引用符 文字列効率_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:46:43849ブラウズ

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

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

$single_quotes = 'これは文字列です'
$double_quotes = "これは文字列です";
echo $single_quotes;
echo $double_quotes;
$var = '文字列';
$single_quotes_var = 'これは '.$var;
$double_quotes_var = "これは $var";
echo $single_quotes_var;
echo $double_quotes_var;
$single_quotes_var_pre = $var は文字列です';
echo $single_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
line # op fetch ext return オペランド
----------------- ---------------------------------------------------- -------- --------
2 0 ASSIGN !0, 'This+is+a+String'
3 1 ASSIGN !1, 'This+is+a+String'
4 2 ECHO !0
5 3 ECHO !1
7 4 ASSIGN !2, '文字列'
8 5 CONCAT ~3 'This+is+a+', !2
6 ASSIGN !3, ~3
9 7 INIT_STRING ~ 5
8 ADD_STRING ~5 ~5, 'This+is+a+'
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, '+is+a+String'
15 ASSIGN !5, ~8
17 16 INIT_STRING ~10
17 ADD_VAR ~10 ~10, !2
18 ADD_STRING ~10 ~10, '+is+ a+String'
19 ASSIGN !6, ~10
19 20 ECHO !5
20 21 ECHO !6
22 22 RETURN 1
23* ZEND_HANDLE_EXCEPTION


演算行 0 に注意してください変数置換なしでは、二重引用符と一重引用符によって生成されるオペコードが同じであることがわかります。
もう一度見てください: 項目 4 ~ 12 では、変数置換を使用する場合、二重引用符と一重引用符を使用して生成されるオペコードが異なることがわかります。二重引用符の場合のオペコードを分析してみましょう:
7 INIT_STRING 文字列変数を初期化し、それを最大 5 つの一時変数に保存します。
8 ADD_STRING は文字列の最初の部分を書き込みます。
9 ADD_VAR は、変数で置き換えられた文字列を書き込みます。
16~28行目も同様です。

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

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

はは、この分析を経て、今後は一重引用符と二重引用符の使い方がより明確に理解できるようになりますか?
ちなみに、変数置換を必要としない純粋な文字列の場合、C/C++ では二重引用符が文字列を表すことは誰もが知っているため、この場合は二重引用符を使用する方が良いでしょう。
さらに、W3C 標準によれば、HTML 内の属性値は二重引用符で囲む必要があるため、一重引用符に慣れてあらゆるところで乱用しないでください。


http://www.bkjia.com/PHPjc/320096.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/320096.html技術記事単純な答えは明らかに弱いです。 今日は、一重引用符と二重引用符の違いは何なのか、どちらが速くてどちらが遅いのかを確認する実験を行います。 テストコードは次のとおりです: コードをコピー コード...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。