PHP_php の例で一重引用符と二重引用符の違いについて話しましょう

WBOY
リリース: 2016-06-16 08:40:58
オリジナル
992 人が閲覧しました

PHP では、文字列の定義に英語の一重引用符 ' ' または英語の二重引用符 " " を使用できます。

ただし、文字列を定義するには同じ一重引用符または二重引用符を使用する必要があります。たとえば、「He​​llo World」と「Hello World」は不正な文字列定義です。

一重引用符と二重引用符の違いは何ですか?この記事を通じてそれについて学びましょう。

1. 文字列
を定義します。

PHP では、文字列の定義に一重引用符または二重引用符を使用できます。ただし、文字列を定義するには同じ一重引用符または二重引用符を使用する必要があります。たとえば、「He​​llo」と「Hello」は無効な文字列定義です。
文字列を定義する場合、一重引用符または二重引用符の 1 種類の引用符のみが区切り文字とみなされます。したがって、文字列が二重引用符で始まる場合は、二重引用符のみがパーサーによって解析されます。このようにして、二重引用符で囲まれた文字列内に他の文字 (一重引用符も含む) を含めることができます。次の引用符文字列は有効です:

Php コード

$s = "I am a 'single quote string' inside a double quote string"; 
$s = 'I am a "double quote string" inside a single quote string'; 
$s = "I am a 'single quote string' inside a double quote string"; 
$s = 'I am a "double quote string" inside a single quote string';  
ログイン後にコピー

「なぜ "this" は機能しないのですか?」という文字列は 3 つの段落に分割されます。この文字列で二重引用符を表現したい場合は、エスケープ文字「" (バックスラッシュ) を使用して、「なぜ "this" は機能しないのですか?」 のようにすることができます。

2. 文字列変数内の単一引用符と二重引用符

PHP では、二重引用符で囲まれた文字列に文字列変数を直接含めることができます。次の 2 つの文字列の処理結果が同じであることがわかります。

$full_name = $first_name . ' ' . $last_name; 
$full_name = "$first_name $last_name";
ログイン後にコピー

一重引用符文字列と二重引用符文字列は、PHP では異なる方法で処理されます。二重引用符で囲まれた文字列の内容は解釈して置換できますが、一重引用符で囲まれた文字列の内容は常に通常の文字とみなされます。例:

Php コード

$foo = 2; 
echo "foo is $foo"; // 打印结果: foo is 2 
echo 'foo is $foo'; // 打印结果: foo is $foo 
echo "foo is $foo\n"; // 打印结果: foo is 2 (同时换行) 
echo 'foo is $foo\n'; // 打印结果: foo is $foo\n 
$foo = 2; 
echo "foo is $foo"; // 打印结果: foo is 2 
echo 'foo is $foo'; // 打印结果: foo is $foo 
echo "foo is $foo\n"; // 打印结果: foo is 2 (同时换行) 
echo 'foo is $foo\n'; // 打印结果: foo is $foo\n  
ログイン後にコピー

ご覧のとおり、一重引用符文字列内のバックスラッシュでさえ、その拡張された意味を失います (バックスラッシュ \ の挿入と一重引用符 ' の挿入を除く)。したがって、変数置換を実行し、文字列に n (改行) などのエスケープ シーケンスを含める場合は、二重引用符を使用する必要があります。一重引用符文字列は他の場所でも使用できます。スクリプト内で一重引用符文字列を使用すると、処理速度が速くなります。これは、PHP パーサーが一重引用符文字列を比較的単純な方法で処理する一方で、二重引用符の処理には文字列内の解析も必要となるためです。したがって、より複雑になり、処理が若干遅くなります。

文字列内の変数の複雑な組み合わせを参照する場合、いくつかの問題が発生する可能性があります。次のコードは正常に機能します。

Php コード

echo "value = $foo"; 
echo "value = $a[$i]"; 
echo "value = $foo"; 
echo "value = $a[$i]"; 
ログイン後にコピー
しかし、次のコードでは必要な結果を得ることができません:

echo "value = $a[$i][$j]"; //2 次元配列 $a の要素を出力したい。

文字列を使用する際のこうした潜在的な問題を回避するには、通常、次のように複雑な変数を文字列から分離します: echo 'value = ' . $a[$i][$j];/ / 文字列を接続するにはドット (.) を使用します。

もう 1 つの方法は、複雑な変数を中括弧で囲んで、パーサーがそれらを正しく識別できるようにすることです。

echo "value = {$a[$i][$j]}" //打印二维数组$a的某个元素
ログイン後にコピー
このようにして、新たな問題が発生します。文字列内で中括弧文字自体を引用したい場合は、エスケープ文字

を使用することを忘れないでください。

Php コード

$var = 3; 
echo "value = {$var}"; // 打印结果 "value = 3" 
echo "value = \{$var}"; // 打印结果 "value = {3}" 
$var = 3; 
echo "value = {$var}"; // 打印结果 "value = 3" 
echo "value = \{$var}"; // 打印结果 "value = {3}"
ログイン後にコピー

3. SQL ステートメント

これはよく発生する問題です。データベースに挿入される SQL ステートメントでは、文字列の定義に一重引用符が使用されます。一重引用符を含む文字列をデータベースに挿入すると、SQL ステートメントが間違ってしまいます。

例:

$sql="insert into userinfo (username,password) Values('O'Kefee','123456')"   
ログイン後にコピー
このとき、SQL ステートメントにエスケープ文字のバックスラッシュを追加する方法があります (

)

つまり:...Values('O'Kefee',...

もちろん、addslashes() 関数を使用することもできます。この関数の機能は、エスケープ文字

を追加することです。

つまり: $s =addslashes("O'Kefee") ……Values('".$s."',…… )

もう 1 つの方法は、php.ini で Magic-quotes オプションを設定することです。このオプションがオンになっている場合、フォームから送信された情報に一重引用符が含まれている場合、エスケープ文字が自動的に追加されます。したがって、他の機能を使用する必要はありません。

補足: これは二重引用符と一重引用符の役割から始まります。二重引用符で囲まれたフィールドはコンパイラーによって解釈されて HTML コードとして出力されますが、一重引用符で囲まれたフィールドは必須ではありません。直接出力します。

例:

$abc='I love u'; 
echo $abc //结果是:I love u 
echo '$abc' //结果是:$abc 
echo "$abc" //结果是:I love u
ログイン後にコピー
そのため、データベース内の SQL ステートメントに値を割り当てる場合は、二重引用符を使用する必要があります。 SQL="select a,b,c from..." ただし、SQL ステートメント内には単一引用符が含まれます。フィールド名

例:

select * from table where user='abc';
ログイン後にコピー
ここでの SQL ステートメントは、SQL="select * from table where user='abc'"

として直接記述することができます。

しかし、次のような場合:

$user='abc'; 
SQL1="select * from table where user=' ".$user." ' ";对比一下 
SQL2="select * from table where user=' abc ' "
ログイン後にコピー

一重引用符と二重引用符の間にもう少しスペースを追加しました。より明確に見ていただけると幸いです。

つまり、「abc」を「.$user.」にすべて一重引用符で囲んで置き換えます。 SQL 文字列全体を分割するだけです。 SQL1 は次の 3 つの部分に分類できます

1:"select * from table where user=' "

2:$user

3:" ' "

文字列を接続するには . を使用すると分かります。

上記は、編集者が紹介した PHP のシングルクォーテーションとダブルクォーテーションの違いについての詳細な説明です。さらに詳しく知りたい場合は、Script House の Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート