[PHP] Tutorial: difference between double quotes and single quotes in PHP and basic operations on strings

Source: Internet
Author: User

"" Fields in double quotation marks are interpreted by the compiler and then output as HTML code.
''Is output directly without being interpreted in single quotes.
For example:

$ Abc = 'My name is tome '; echo $ ABC // The result is: My name is tomecho' $ abc' // The result is: $ abcecho "$ ABC" // The result is: My name is Tom.

Especially when using MySQL statements, double quotation marks and single quotation marks are confusing for beginners. Here is an example to illustrate.
Assume that constants are used in the query conditions, for example:

select   *   from    abc_table where user_name='abc'; 

The SQL statement can be written as follows:

SQLstr = "select    *    from abc_table where user _name= 'abc'" ; 

Assume that the query conditions use variables, for example:

$ User_name = $ _ request ['user _ name']; // string variable


$ User = array ("name" =>$ _ request ['user _ name', "Age" =>$ _ request ['age']; // array variable

The SQL statement can be written as follows:

SQLstr = "select    *    from abc_table where user_name = ' " . $user_name . " ' ";SQLstr = "select * from abc_table where user_name = ' " . $user["name"] . " ' "; 


SQLstr="select * from abc_table where user_name = ' abc ' " ;SQLstr="select * from abc_table where user_name =' " . $user _name . " ' ";SQLstr="select * from abc_table where user_name =' " . $user["name"] . " ' "; 

Sqlstr can be divided into the following three parts:
1: "select * from table where user_name = '" // fixed SQL statement
2: $ user // variable
3 :"'"
Connect 1, 2, and 3 strings "."

I. Define strings using quotation marks

In PHP, a string is usually defined in a pair of quotation marks, such:

'I am a string in single quotes'
"I am a string in double quotes"

The PHP syntax analyzer uses pair quotation marks to determine a string. Therefore, all strings must use the same single or double
To define start and end. For example, the following string definition is illegal:

"I am not a valid string since I have unmatching quote marks'
'Me neither! "

When defining a string, only one type of quotation mark is considered as a definition character, that is, single quotation marks or double quotation marks. Therefore, if a string is
The quotation marks are parsed by the analyzer. In this way, you can include any other character in the double quotation mark string, or even a single cited
. The following quotation marks are valid:

$s = "I am a 'single quote string' inside a double quote string";$s = 'I am a "double quote string" inside a single quote string';

When PHP encounters a quotation mark corresponding to the start of the string, it is considered to have reached the end of the string, so:

"Why doesn't" this "work? "

In fact, PHP syntax analyzer is divided into three parts:

"Why doesn' t" -- contains a single double quotation mark string
This -- redundant characters, which cannot be processed by the analyzer
"Work? "-- Common string

The above example attempts to include double quotation marks in the double quotation mark string, and the analyzer considers the string to be closed when the second double quotation mark is encountered.
. To enclose quotation marks, the analyzer must ignore the original meaning of the regular quotation marks in a string.
Add a backslash to tell PHP: this quotation mark is a part of the string. The correct expression is as follows:

"Why doesn't \" that \ "work? "

A common problem in English strings is the use of the marker, because it is a single quotation mark, which is very common in English strings.
(In english ). You must handle these characters with caution:

You \ 'd better escape your apostrophes'

We can see that the backslash has its special meaning in the string. When we need to include the backslash itself in the string, we need
Add a backslash before the symbol. For example:

$ File = "C: \ WINDOWS \ SYSTEM. ini "; echo $ file; // The printed result is: C: Windowssystem. INI $ file = "C: \ Windows \ System. ini "; echo $ file; // The printed result is: C: \ WINDOWS \ SYSTEM. ini

Another string definition method can eliminate the troubles of special characters and facilitate reference of long texts. This string definer
Method starts with a <symbol followed by a custom string, and the last line ends with the custom string, and must be a top-level.

2. String connection
A string can be connected using a string connector (.), for example:

$first_name = 'Charlie';$last_name = 'Brown';$full_name = $first_name . ' ' . $last_name;

A common purpose is to create a large HTML string code. The Value Pair (=) connector (.) can be abbreviated as a (. =) character.
Number, such:

$html = '<table>';$html .= '<tr><td>number</td><td>square</td></tr>';for ( $i=0 ; $i<10 ; $i++) {$square = $i * $i;$html .= '<tr><td>' . $i . '</td><td>' . $square . '</td></tr>';}$html .= '</table>';

3. Use variables in strings

This feature allows you to stick a large number of simple strings without using the Concatenation symbol. PHP allows us to directly include words in double quotation marks
String variables, we can find that the processing results of the following two strings are the same.

$full_name = $first_name . ' ' . $last_name;$full_name = "$first_name $last_name";

The processing of single and double quotation marks is different in PHP. The content in the double quotation mark string can be interpreted and replaced.
The content in the string is generally considered a common character. For example:

$ Foo = 2; echo "foo is $ foo"; // print the result: foo is 2 Echo 'foo is $ foo'; // print the result: foo is $ fooecho "foo is $ Foo \ n"; // print the result: foo is 2 (line feed at the same time) echo 'foo is $ Foo \ n'; // print the result: foo is $ Foo \ n

As you can see, in single quotes, even the backslash also loses its extended meaning (except for inserting the backslash \ and the insert ticket
Quotation marks \'). Therefore, when you want to replace the variable in the string and include escape sequences such as \ n (linefeed), you should use double quotes
. The single quotation mark string can be used anywhere else. The processing speed of the single quotation mark string in the script is faster, because the PHP syntax analyzer
The processing of single quotation marks is simple, while the processing of double quotation marks is more complicated because the strings need to be resolved internally, so the processing speed is high.

When you reference a complex variable combination in a string, some problems may occur. The following code works properly:

echo "value = $foo";echo "value = $a[$i]";

However, the following code cannot get the expected results:

Echo "value = $ A [$ I] [$ J]"; // we want to print an element of the Two-dimensional array $.

To avoid potential problems in the use of these strings, we usually separate complex variables from the strings, like this:

echo 'value = ' . $a[$i][$j];

Another way is to enclose Complex Variables in curly brackets so that the syntax analyzer can correctly identify them:

Echo "value = {$ A [$ I] [$ J]}" // print an element of a two-dimensional array $

In this way, new problems have emerged. When we want to reference the curly braces in a string, remember to use the escape character:

$ Var = 3; echo "value = {$ var}"; // print the result "value = 3" Echo "value =\{ $ var }"; // print the result "value = {3 }"

Iii. slashes and SQL statements

Generating HTML code or SQL query statements is a common and interesting issue when writing PHP programs. Why,
Because this involves generating another type of code, you must carefully consider and follow the syntax and rules required by this Code.

Let's take a look at this example. If you want to query a database named "O" keefe ", it is usually in the form of SQL statements.

select * from users where last_name = 'O\'Keefe'

Note that the SQL statement must be escaped by a backslash. PHP provides some special functions to handle this problem.

The function addslashes ($ Str) is used to automatically insert a backslash escape character to the quotation mark character in the string:

$last_name = "O'Keefe";$sql = "select * from users where last_name = '" . addslashes($last_name) . "'";

In this example, you also need to enclose single quotes (SQL syntax Requirements) outside the last_name string, because the double
Quotation marks, so you do not need to use escape for this pair of single quotes. The following statement uses the equivalent form of a single quotation mark string:

$sql = 'select * from users where last_name = \'' . addslashes($last_name) . '\'';

At any time you want to write strings in the database, you must ensure that the quotation marks Correctly Use escape characters. This is a lot of PHP
Common mistakes made by beginners.

Iv. Double quotation marks and HTML

Unlike SQL statements, double quotation marks ("double quotation marks") are often used to represent strings in standard HTML languages (many browsers currently have strong fault tolerance capabilities
Yes. You can use single quotes in HTML to represent strings without quotation marks. For example:

$html = '<a href="'.$url.'">'.$link.'</a>';$html = "<a href=\"$url\">$link</a>";

The HTML language does not support backslash escape, which is required when the hidden inputs of the form is used for data transmission.

Experience. The best way to set the value of hidden inputs is to use the htmlspecialchars () function for encoding. The following statement can be
To transmit data that may contain double quotation marks normally:

<input type=hidden name=var value="<?php echo htmlspecialchars($var) ?>"> 

Some people often ask me, I heard that it is faster to process strings in PHP with single quotes. If there is a variable to replace, is it faster to connect with single quotes or double quotes? A simple answer is obviously pale and powerless. Let's make an experiment today to see what is the difference between single quotes and double quotes, who is fast and who is slow.

The test code is as follows:

<?php$single_quotes = 'This is a String';$double_quotes = "This is a String";echo $single_quotes;echo $double_quotes;$var = 'String';$single_quotes_var = 'This is a '.$var;$double_quotes_var = "This is a $var";echo $single_quotes_var;echo $double_quotes_var;$var = 'This';$single_quotes_var_pre = $var . ' is a String';$double_quotes_var_pre = "$var is a String";echo $single_quotes_var_pre;echo $double_quotes_var_pre;?>

Next, let's take a look at the Opcodes generator we mentioned in previous articles, and finally how our code is executed:

Branch analysis from position: 0
Return found
Filename:/home/XinChen/string. php
Function Name: (null)
Number of OPS: 24
Compiled vars :! 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 operands
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, 'string'
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, 'eas'
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
Note that there are 0th to 3rd op lines. We can see that the double quotation marks and the Opcodes produced by single quotation marks are the same without variable replacement.
Let's take a look at the 4th-12th entries. We can find that, when using variable replacement, the Opcodes generated by using double quotation marks and single quotation marks are different. We will analyze the Opcodes in double quotation marks:
7 init_string initializes a string variable, which is stored in ~ 5.
8 add_string writes the first part of the string.
9 add_var writes the string replaced by the variable.
Line 16-28 is the same.

From this point, we can find that the execution of the same logic is indeed different when double quotation marks are used and when single quotation marks are used (because, opcodes is the final Execution Code for PHP ). From the number of generated opcods alone, it is enough to prove that it is faster to use single quotes.

As for the compilation phase, double quotation marks and single quotation marks are also very different. I will give a number to illustrate: In the scanning phase, there are 14 lexical rules for double quotation marks, while for single quotation marks, there are only 6 entries.

For W3C standards, attribute values in HTML should be enclosed in double quotation marks, so do not get used to single quotation marks and abuse them everywhere.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.