深入詳談PHP單引號和雙引號區別

來源:互聯網
上載者:User

在PHP中單引號和雙引號並非是互連的,具體區別如下:

” ” 雙引號裡面的欄位會經過編譯器解釋,然後再當作HTML代碼輸出。

‘ ‘ 單引號裡面的不進行解釋,直接輸出。

從字面意思上就可以看出,單引號比雙引號要快了。

例如:

$abc=’my name is tome’;
echo $abc //結果是:my name is tom
echo ‘$abc’ //結果是:$abc
echo “$abc” //結果是:my name is tom


在SQL語句中  
 
這是會經常遇到的問題,在插入資料庫的SQL語句是採用單引號來定義字串,如果要將一個含有單引號的字串插入資料庫,這個SQL語句就會出錯。
如:$sql="insert into userinfo (username,password) Values('O'Kefee','123456')"   
此時,處理的方法之一是在SQL語句中加入轉義符反斜線,
即:……Values('O\'Kefee',……   
當然也可以使用函數 addslashes(),該函數的功能就是加入轉義符,
即:$s = addslashes("O'Kefee") ……Values('".$s."',……   
還有一種方法是設定php.ini中的magic-quotes選項,開啟該選項,則通過表單提交的資訊中如果有單引號是,將會自動加上如轉義符。因此不用使用其他函數了。
補充: 這就要從雙引號和單引號的作用講起: 雙引號裡面的欄位會經過編譯器解釋然後再當作HTML代碼輸出,但是單引號裡面的不需要解釋,直接輸出。

$val ='a';

sql =" select * from table where name like '%$val%'"; //將自動替換裡面的$val,但如果要用單引號來組織語句則表示為:
sql =' select * from table where name like \'%'.$val.'%\''; //麻煩很多

 
但用單引號代替雙引號來包含字串,這樣做會更快一些,因為PHP會在雙引號包圍的字串中搜尋變數,單引號則不會。

假設查詢條件中使用的是常量,例如:

select * from abc_table where user_name=’abc’;
SQL語句可以寫成:
SQLstr = “select * from abc_table where user _name= ‘abc’” ;
假設查詢條件中使用的是變數,例如:
$user_name = $_REQUEST['user_name']; //字串變數

$user=array (”name”=> $_REQUEST['user_name‘,"age"=>$_REQUEST['age'];//陣列變數
SQL語句就可以寫成:
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可以分解為以下3個部分:
1:”select * from table where user_name = ‘ ” //固定SQL語句
2:$user //變數
3:” ‘ ”
1,2,3部分字串之間用”.” 來串連


PHP效率計:從引號開始(單引號、雙引號效率區別)

實驗一:在普通情況下的效率
我們的實驗是5000次執行10000個位元組的檔案,獲得解析過程中的速度。
首先,本實驗特別規定一個單位,這是為了更好地表示以及排除電腦本身效率的差異。
時間單位 TT,表示約 7.2×10[sup]-8[/sup]s 。
我們獲得四組實驗資料,可理解為表示 'a' 比 "a" 快的時間:
         0.29 TT,大概0.0000000206s
         0.46 TT,大概0.0000000328s
         0.38 TT,大概0.0000000275s
         0.41 TT,大概0.0000000292s
平均值:0.39 TT ('aaaa....(139個)' 的效率接近於 "aaa...(100個)" )
結論:在資料量相同,並且在普通情況下(不藉助轉義),使用單引號速度更快。

實驗二:單引號轉義的效率
我們的實驗是5000次分別以「單引號、雙引號」執行兩份資料相同,但其中一份特別用\'表示單引號。
時間單位 TT,表示約 7.2×10[sup]-8[/sup]s 。
我們獲得四組實驗資料,可理解為表示 " ' " 比 ' \' ' 快的時間:
         0.19 TT,大概0.0000000138s
         0.15 TT,大概0.0000000110s
         0.23 TT,大概0.0000000162s
         0.24 TT,大概0.0000000173s
平均值:0.2 TT (” ''''...(12個) " 的效率接近於 ' \'\'...(10個)" )
結論:如果字串中需要表示單引號(MySQL查詢),應儘可能避免轉義,所以應使用雙引號。
實驗三:花括弧的效率
我們的實驗是1000次執行含有數量一定的變數標記的檔案,獲得解析過程中的速度。
時間單位 TT,表示約 1.581×10[sup]-7[/sup]s~1.666×10[sup]-7[/sup]s 。(TT 變化)
得到三組資料,表示 "{$abc}" 比 "$abc" 快。
       15.3 TT,大概0.0000024186s
       14.5 TT,大概0.0000024093s
       15.3 TT,大概0.0000024152s
這資料是十分驚人的,平均結果 15 TT。
這意味著:使用花括弧的解析速度,大約是不使用花括弧的16倍。
結論:在雙引號中表示變數,儘可能使用花括弧。

實驗四:連續與非連續的效率
我們的實驗是1000次執行含有數量一定的變數標記的檔案,獲得解析過程中的速度。
時間單位 TT,表示約 1.581×10[sup]-7[/sup]s~1.666×10[sup]-7[/sup]s 。(TT 變化)
第一組實驗資料,表示 "{$abc}{$abc}{$abc}..." 比 $abc.$abc.$abc 平均每個變數解析快
       22.45 TT,大概0.0000035498s
       21.03 TT,大概0.0000035037s
       22.12 TT,大概0.0000034930s
       花括弧(連續)比單引號(非連續)快的時間,平均結果 22 TT。
       這意味著:使用花括弧的解析速度,大約是使用不連續的單引號的23倍。
       結論:在單引號中表示多個變數(或資料總量少),儘可能換用雙引用,並使用花括弧。
第二組實驗資料,表示 "...$abc$abc$abc..." 比 ‘...’.$abc.$abc.$abc.'...' 平均每個變數解析快
       7.15 TT,大概0.0000011311s
       6.57 TT,大概0.0000010943s
       6.83 TT,大概0.0000010777s
       雙引號(連續)比單引號(非連續)快的時間,平均結果 7 TT。(該資料變化)
       這意味著:變數多時,使用雙引號(不使用花括弧)的解析速度,大約是使用不連續的單引號的8倍。
       結論:在雙引號中表示多個變數(或資料總量少),比使用單引號而需要用「串連運算子」要快。
結論:表示多個變數時(或資料總量少),應可能範圍內使用雙引號,並使用花括弧。
(附:作者推測,這可能和記憶體空間的分配有關係,連續符可能會使記憶體不斷調整)

最終結論:
首先,表示簡單的資料時(不需要轉義),盡量用單引號。
   'Cal: Are you good at long jump?'
但如果因為使用單引號,而需要進行轉義(即包含單引號),考慮使用雙引號。
   'Cal: Yes. But, you know, it\'s written.' => "Cal: Yes. But, you know, it's written."
如果需要表示變數,應盡量使用花括弧。
   "Cal: $to" => "Cal: {$to}, you shouldn't go shopping."
盡量使其連續:
   'Cal: '.$calsaid => "Cal: $calsaid" => "Cal: {$calsaid}"

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.