php單引號和雙引號的區別與用法


  php里的單引號把內容當成純文本,不會經過服務器翻譯。而雙引號則與此相反。里面的內容會經過服務器處理(process). 舉個簡單的例子:

 
$foo="data";
echo '$foo';                        //單引號輸出$foo
echo "$foo";                         //雙引號輸出data
 
 單引號不能處理變量和轉義字符( 除了\\和\'這兩個),要輸出下面的字符串
 
     what's my name?
 
可以這么來寫:
   
      echo "what's my name?";  //最簡單的寫法,單引號和雙引號不產生沖突(conflict)
      echo 'what\' my name?';  用斜杠轉義
   正如你所看到的,在單引號串中甚至反斜杠也失去了他的擴展含義(除了插入反斜杠\\和插入單引號\')。所以,當你想在字串中進行變量代換和包 含\n(換行符)等轉義序列時,你應該使用雙引號。單引號串可以用在其他任何地方,腳本中使用單引號串處理速度會更快些,因為PHP語法分析器對單引號串 的處理方式比較單純,而雙引號的處理由於串內部也需要解析,因此更復雜些,所以處理速度略慢
寫一個windows無效文件名替換函數。(windows文件名無效字符有9個:
/ 去掉文件名中的無效字符,如 \ / : * ? " < > | 
function replaceBadChar($fileName)
{
    // 去掉文件名中的無效字符,如 \ / : * ? " < > | 
    $fileName=str_replace('\\','_',$fileName);
    $fileName=str_replace('/','_',$fileName);
    $fileName=str_replace(':','_',$fileName);
    $fileName=str_replace('*','_',$fileName);
    $fileName=str_replace('?','_',$fileName);
    $fileName=str_replace('"','_',$fileName);
    $fileName=str_replace('<','_',$fileName);
    $fileName=str_replace('>','_',$fileName);
    $fileName=str_replace('|','_',$fileName);
    return $fileName;
}
$str='\/:*?"<>|';
echo replaceBadChar($str);

最開始我把他們都用反斜杠轉義了,結果只輸出前1個,因為只有反斜杠和單引號需要在單引號中轉義,其他都不需要

還有一點的是,str_replace只是簡單的字符串替換,與正則無關,所以上面的改成雙引號也是ok的

 
如果要輸出含有變量的字符串時就必須小心點,否則很可能產生錯誤。
   
     $email=$_POST['email'];
 
現在要輸出this is your  email $email;可以有兩個方式
 
  echo "this is your email $email";  //雙引號服務器會自動解析
  echo 'this is your email'.$email; //用連字符和純字符串和變量鏈接起來
 
  一旦涉及到Mysql中的sql語句,就更得小心了。從簡單說起,sql語句,其中的條件是常量
       
       SELECE *  FROM  email_table WHERE username="abc";
 
php中可以寫成
       $query="SELECE * FROM  email_table WHERE username='abc'";//query語句一定要用雙引號括起來
 
假設查詢的條件是變量,如$abc=$_POST['username'];
可以寫成
            $query="SELECT * FROM email_table WHERE  username=' ".$abc." ' ";
 
可以分成幾步理解:
1."SELECT * FROM email_table WHERE  username=' " 純字符串
2. .連接符,用來鏈接后面的字符
3.$abc 顯示變量的值
4.." ' "連字符鏈接后面的單引號(為了與條件中的第一個單引號配對)
其實不必這么復雜,可以這么寫
$query="SELECT * FROM email_table WHERE username='$abc' ";
可以這么理解,雙引號內部的全都要被服務器解析,單引號只是當成普通字符而已.
 
再復雜一點
$user=array (”name”=> $_REQUEST['user_name‘,"age"=>$_REQUEST['age'];//
$abc=array("name"=>$_POST['username'],"age"=>$_POST['age']);
$abc為數組變量,則寫成
$query="SELECT * FROM email_table WHERE username=' " .$abc["name"]." ' ";
 
      最后需要說明的是,很多人以為單引號不能包含雙引號,這是錯誤的。就個簡單的例子,輸出html語句,
 
echo ' <input type="text" name="email" id="email" /> '; 
   
   html包含很多的雙引號使用,可以用單引號包含起來,是沒有問題的 。雙引號雖好,能包含變量和轉義字符,但是效率比單引號低,能用單引號的盡量用單引號,不可忽略的是,要注意區分英文和中文引號(dreamweave包含字符串時會高亮顯示,中文則不會)。
  單引號里面的雙引號中的變量不會解析! 
 
一.首先想想PHP里所有的單詞(其實應該叫符號)有幾類.

1.PHP,mysql兩方的關鍵詞與函數.例如echo,print,mysql_connect等等.這些肯定不加引號的.

2.常量.新手可能用得不多,常量的好處是全局性,穿透函數.速度也快些不過新手可以暫時不管常量這玩意兒.

3.變量.前面帶"$"號的就是變量.可以為變量設一個"值",例如一串字符,一個數字,邏輯(真/假)值等.也可以表示一組值(數組,對象等)

4.值.通常要給常量與變量設置值.賦值語句$a=\'abc\'中,右邊的\'abc\'即為值.

5.函數的參數(在括號里的).可以是常量,變量,值三種.

變量(常量)與值的關系正如下列各種情況.

"顏色"與"紅",

"長度"與100,

"日期"與2007年10月25號"

二.什么情況下用PHP引號

其實只有第4項"值"需要用到引號,函數的里也只有值要用引號.並且只有字符串(日期值可以當成字符串)內容需要用到引號.數字(可用可不用),真假(不能用)例外.

例子

三.單引號與雙引號的區別

一般情況下兩者是通用的.但雙引號內部變量會解析,單引號則不解析.

例子

所以如果內部只有純字符串的時候,用單引號(速度快),內部有別的東西(如變量)的時候,用雙號引更好點.

四.字符串內部如果出現PHP引號怎么辦--關於轉義.

比如我們想輸出: 我"是\'天才

這時候就必須用到轉義了.轉義即把本來有作用的符號轉成無意義的字符.

這樣就正常了,因為號把它后面的任何字符都轉成無意義的符號.在這里來說,PHP解析器根本沒把號后面的引號當成引號來看待.

同樣的,還可以轉義分號,$符號等特殊符號.

五.字符串的連接.

這是個麻煩的問題.一般來說,變量值,直接包含在雙引號中就可以了.另外字符串的疊加用"."字符.

在復雜的情況里可以用大括號來包含,PHP便知道這是一個完整的東西,里面的引號不會影響到外面的引號關系.

與html的混合也很簡單,最好養成HTML中全部用雙引號,PHP中盡量用單引號的習慣.這樣方便把大段的HTML代碼復制過來,只要頭尾加上單引號就是一個正確的字符串了.幾百行的HTML代碼也不用擔心PHP引號錯亂.

總結一下PHP引號使用原則

1.字符串的值用引號

2.PHP中盡量用單引號,HTML代碼全部用雙引號

3.在包含變量的時候,用雙引號可以簡化操作

4.復雜的情況下用大括號包起來

PHP引號還有一個用處就是,有的時候需要用php生成文本文件,換行符\n需要用雙引號才能好使,單引號則會直接把\n當成字符輸出。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM