PHP中單引號和雙引號的區別

来源:http://www.cnblogs.com/androidshouce/archive/2016/06/12/5576488.html
-Advertisement-
Play Games

1、定義字元串 在PHP中,字元串的定義可以使用單引號,也可以使用雙引號。但是必須使用同一種單或雙引號來定義字元串,如:‘Hello"和“Hello'為非法的字元串定義。 定義字元串時,只有一種引號被視為定義符,即單引號或雙引號。於是,如果一個字元串由雙引號開始,那麼只有雙引號被分析器解析。這樣,你 ...


1、定義字元串    
在PHP中,字元串的定義可以使用單引號,也可以使用雙引號。但是必須使用同一種單或雙引號來定義字元串,如:‘Hello"和“Hello'為非法的字元串定義。    
定義字元串時,只有一種引號被視為定義符,即單引號或雙引號。於是,如果一個字元串由雙引號開始,那麼只有雙引號被分析器解析。這樣,你就可以在雙引號串中包含任何其他字元,甚至單引號。下麵的引號串都是合法的: 

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';    

而串 "Why doesn't "this" work?" 則會被分為三段。如果在這個串中想要表示出雙引號,則可以使用轉義符"\"(反斜線),變成 "Why doesn't \"this\" work?" 即可。 

2、字元串變數中的單、雙引號    

PHP允許我們在雙引號串中直接包含字串變數,我們可以發現下麵的兩個字串的處理結果是相同的。 

$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]"; //我們希望列印二維數組$a的某個元素。    

為避免這些字串使用中的潛在問題,我們通常把複雜的變數從字串中分離開來,就像這樣:echo 'value = ' . $a[$i][$j];//字元串的連接用點(.)    

還有一種辦法是將複雜變數用花括弧括起來,語法分析器就能正確辨認了: 

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."',……    

還有一種方法是設置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:" ' " 

字元串之間用 . 來連接,這樣能明白了吧。 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 厚積薄發 這個詞是高三英語老師在高考前寫在黑板上,高中三年努力這麼久,是時候迎面而上,衝刺向前。所以,一想到.NET 2016,腦海裡蹦出的第一個詞就是它。 .NET 2016 是 .NET 一次質的飛躍,不管難易,我們需要擁抱變化。 初識 .NET 2016 .NET 2016 概覽 .NET 2 ...
  • 筆者的開發環境如下: Windows8.1+Apache+PhpStorm+XDebug+Firefox(XDebug helper 1.4.3插件)。 一、XDebug安裝配置 (1)下載XDebug 下載地址:http://www.xdebug.org/ 必須下載跟機器上安裝的php匹配的版本才 ...
  • 運行環境: PHPSTORM版本 : 8.0.1 PHP版本 : 5.6.2 xdebug版本:php_xdebug-2.2.5-5.6-vc11-x86_64.dll ps : php版本和xdebug版本一定要相對應 1. PHP安裝xdebug擴展 php.ini的配置,下麵的配置僅供參考,路 ...
  • 由於換電腦或重裝系統後常需要重新搭建PHP環境,此次簡單記錄一下Windows下搭建PHP環境的過程,具體步驟可以參照網上資料 準備工作: Windows下手工搭建PHP環境需要先下載相應的軟體,此次下載的軟體版本如下圖所示: 安裝過程: 一、安裝Apache 雙擊安裝,與安裝其他Windows軟體 ...
  • 具體來說 cookie 是保存在“客戶端”的,而session是保存在“服務端”的 cookie 是通過擴展http協議實現的 cookie 主要包括 :名字,值,過期時間,路徑和域; 如果cookie不設置生命周期,則以瀏覽器關閉而關閉,這種cookie一般存儲在記憶體而不是硬碟上.若設置了生命周期 ...
  • 首先,將PHP項目的PHP版本設置為PHP 7.0。 PHP 7其中一項新特性是返回類型聲明,即PHP的函數和方法可以聲明指定類型的返回值: PHP 7的另一項精彩的改進就是參數的標量類型聲明,Netbeans的代碼自動完成功能提供了這些新類型支持。 NetBeans也支持PHP 7新出現的操作符: ...
  • 1、簡介 快速入門指南會對Yii2框架做一個基本介紹,包括資料庫遷移、gii操作、AR模型、路由、驗證、視圖等等。如果你是個Yii2新手甚至之前對PHP框架也很陌生,那麼這裡將會成為你的良好起點。如果你已經使用並且掌握了Yii2框架基礎,可以期待Yii2高級篇教程(後面我會更新)。 為了演示Yii2 ...
  • Python備份目錄及目錄下的全部內容 本來是想寫一個東西可以直接調用TortoiseSVN保存當前代碼到一個分枝下的。 可惜調用SVN的部分還在研究。就先寫了目錄拷貝的部分。 如果有喜歡研究Python的童鞋願意提供想法或者建議的話, 這裡先謝謝了。 :) 就目錄拷貝的部分,思想很簡單。讀配置文件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...