本節書摘來自華章計算機《微信公衆平台開發:從零基礎到thinkphp5高性能架構實踐》一書中的第2章,第2.2節,作者 方倍工作室,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
php(超文本預處理器,hypertext preprocessor)于1994年由rasmus lerdorf建立,他也被稱為“php之父”。php是一種通用開源腳本語言。其文法吸收了c語言、java和perl的特點,便于學習,使用廣泛,主要适用于web開發領域。php是最受歡迎的web開發語言之一,也是微信公衆平台開發使用最廣泛的語言。
sql是結構化查詢語言(structured query language)的簡稱,它是一種資料庫查詢和程式設計語言,用于存取資料以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本檔案的擴充名。mysql是一個開放源碼的小型關系資料庫管理系統,開發者為瑞典mysql ab公司,目前屬于oracle公司旗下産品。mysql被廣泛應用在internet上的中小型網站中。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了mysql作為網站資料庫。
除了php和mysql之外,html、css樣式表和腳本語言javascript也是web開發的基礎,一般使用html來設計web頁面的結構,使用css樣式表來控制web頁面的顯示效果,使用腳本語言來控制浏覽器的特效及表單資料的驗證。掌握這些有助于開發者開發出更豐富和更強大的功能。
php的文法和c、c++等語言的文法很相似,有c語言基礎的讀者,可以非常輕松地掌握php的基本文法。由于php的文法比較簡單,即使沒有任何開發語言基礎,也可以快速熟悉它。
1.第一個程式
打開編輯器notepad++,在其中編寫如下内容。

下面對這個程式進行講解。
所有php代碼都是以“<?php”開頭,以“?>”結尾的,php的預設檔案擴充名是“.php”。“//”表示該行是注釋,它的作用是供代碼開發者閱讀,不會被程式執行,是以代碼中的“作者:方倍”就沒有在浏覽器中顯示。echo是php的一個語句,它的作用是将一串字元顯示出來,是以在浏覽器中看到了“你好,微信!”這一段内容。
2.變量及類型
變量是指程式中可以改變的資料量,變量需有一個名字,用來代表變量和存放變量的值。php中使用美元符号“$”後跟變量名來表示一個變量,如“$result”。php的變量主要有以下類型:整數類型、浮點類型、字元串類型、布爾類型、數組類型、對象。下面是整型、浮點型、字元串類型的示例代碼。
上述代碼分别定義了一個整數類型變量和一個浮點類型變量和一個字元串類型變量。它在浏覽器中的運作效果如圖2-16所示。
3.常量
php中通過define()函數定義常量。合法的常量名隻能以字母和下劃線開始,後面可以跟任意字母、數字或下劃線。常量一旦定義就不能再修改或者取消定義。常量定義的示例代碼如下。
上述代碼定義名為token的常量,它的值為weixin,在浏覽器中的運作效果如圖2-17所示。
4.運算符
運算符是指通過一個或多個表達式來産生另外一個值的某些符号,如“+”、“%”、“.”等都是運算符。
在php中,使用符号“=”表示指派。它的含義是将一個值指定給一個變量。例如,“$a=5”表示将5賦給$a。
php的算術運算符有加(+)、減(-)、乘(*)、除(/)和取模(%)、取反(-,即取負值)。例如,“$x + $y”表示變量$x和變量$y的值相加。
php有遞增/遞減運算符。遞增運算符是指對目前表達式的值增加1,遞減運算符正相反,對表達式的值減1。例如,“++$x”表示$x加1遞增,然後傳回$x;“$x--”表示先傳回$x,然後$x減1遞減。
php的字元串運算符隻有一個,即字元串的連接配接運算符“.”。例如,“$x="hello";$x .= "weixin!";”表示變量$x的末尾加上字元串“weixin!”。這時$x的值為“hello weixin!”。
php的邏輯運算符有與(and)、或(or)、異或(xor)、與(&&)、或(||)、非(!)。
php的比較運算符有等于(==)、全等(===)、不等于(!=)、不等于(<>)、不全等(!==)、大于(>)、小于(<)、大于或等于(>=)、小于或等于(<=)。
除此之外,還有條件運算符“expr1 ? expr2 : expr3”,它的計算規則是:如果表達式expr1的值為真,那麼整個表達式的值就取expr2的值,否則,就取expr3的值。
下述代碼是常用運算符的示例。
在浏覽器中的運作效果如圖2-18所示。
5.流程控制
php程式由語句構成,通常情況下,程式從第一條語句開始執行,按順序執行到最後一句。但有時因為某些原因,需要改變程式的執行順序,這就需要對程式的流程進行控制。
php程式的執行方式有3種:順序執行、選擇執行、循環執行。通過使用這3種控制結構,可以改變程式的執行順序,以滿足解決問題的需求。順序結構使程式從第一條語句開始,按順序執行到最後一句。在選擇結構中,程式可以根據某個條件是否成立,選擇執行不同的語句。在循環結構中,程式可以根據某種條件和指定的次數,使某些語句執行多次。
(1)if語句/if...else語句/if...elseif...else語句
在php中,可以使用以下條件語句。
if語句:如果指定條件為真,則執行代碼。
if...else語句:如果條件為真,則執行代碼;如果條件為假,則執行另一段代碼。
if...elseif...else語句:選擇若幹代碼塊之一執行。
下述代碼是if語句系列的使用方法。
上述代碼的含義解讀如下。
在if語句中,如果目前時間(hour)小于18,則輸出“白天!”。
在if...else語句中,如果目前時間(hour)小于18,則輸出“白天!”,否則輸出“晚上!”。
在if...elseif...else語句中,如果目前時間(hour)小于12,則輸出“上午!”;如果大于12且小于18,則輸出“下午!”;否則輸出“晚上!”。
(2)switch語句
switch語句首先計算表達式expr的值,如果expr的值與某個case的值比對,則從該case後面的語句開始執行,直到遇到break語句或整個switch語句結束。
在上述代碼中,判斷變量$x的值,将它與case的值進行比較。如果存在比對的case,則執行與該case關聯的代碼。如果沒有case為真,則執行default中的代碼。
(3)for循環
for循環執行代碼塊指定的次數。下面的例子顯示了從0到3的數字。
其運作效果如圖2-19所示。
(4)while循環
while循環當指定條件為真時執行代碼塊。
下面的例子首先把變量$x設定為1($x=1),然後執行while循環(隻要$x小于或等于5)。循環每運作一次,$x将遞增1。
其運作效果如圖2-20所示。
6.數組
數組能夠在一個變量名中存儲許多值,并且能夠通過引用下标号來通路某個值。
在php中,建立數組使用array()函數。常用的數組類型有索引數組和關聯數組。
索引數組的索引是自動配置設定的(索引從0開始)。下面的代碼建立了一個索引數組。
該數組的名稱為office,第一個元素的值是word,第二個元素的值是excel,第三個元素的值是outlook,第四個元素的值是access。
關聯數組的建立方法如下。
下面的代碼建立了一個關聯數組。
它定義了3個元素,以“張三”、“李四”、“王五”為鍵名,他們的年齡為各自的值。
實際上,索引數組是一種特殊的關聯數組。
下面示範了建立及周遊數組的方法。
程式執行的效果如圖2-21所示。
7.函數
在程式設計中,經常将一些常用的功能子產品編寫成函數,供程式或其他檔案使用。函數就像一些小程式,用它們可以組成更大的程式。使用者定義的函數聲明以“function”開頭。
這裡建立了名為“familyname()”的函數。左花括号“{”表示函數代碼的開始,而右花括号“}”表示函數的結束。
下面例子中的函數有兩個參數$name和$year。當調用familyname()函數時,同時要傳遞名字(如“三”)和出生年(如1980),這樣會輸出姓相同但名不同的姓名,以及出生年。
上述程式執行的效果如圖2-22所示。
8.類
類是變量與作用于這些變量的函數的集合。變量通過var定義,函數通過function定義,而類通過下面的文法定義。
上面的例子定義了一個cart類,這個類由購物車中的商品構成的數組和一個用于向購物車中添加商品的函數組成。
類的用法舉例如下。
上述代碼建立了一個cart類的對象$cart,對象$cart的方法add_item()被調用時,添加了3件“手機”商品。
本小節示範如何使用sql語句及php程式建立和使用一個簡單的資料庫表。
表2-1所示是一個名為“wx_user”的表。
wx_user表含有4個列(id、openid、username及telephone)和兩條記錄(每條記錄對應一個人)。
1.建立資料庫表
下面是建立一個資料庫表“wx_user”的sql腳本。
建立資料庫表時使用create table指令。指令中間部分的内容是建立條件,包括列名、列的資料類型及長度、是否允許為空、是否有自增屬性、是否是唯一key、是否為主鍵等。
在phpmyadmin的sql運作框中,運作上述代碼後,将建立一個名為“wx_user”的表,如圖2-23所示。
2.插入資料
向資料庫表插入資料時使用insert into語句。其文法如下。
在本例中,插入語句可以這樣寫。
下面是使用php程式進行送出的代碼。
在上述代碼中,首先建立到資料庫的連接配接,這是通過mysql_connect()函數完成的,連接配接的主機為“localhost”,端口為“3306”,賬号和密碼都為“root”。然後通過“set names 'utf8'”指令設定字元集為utf8,這樣就能正常顯示中文。之後通過mysql_select_db()函數設定要連接配接的資料庫“book”。最後使用mysql_query()函數向wx_user表中插入兩條記錄。執行完畢後,使用mysql_close()函數關閉mysql連接配接。
3.查詢資料
從資料庫中查詢資料時使用select語句。其文法如下。
在本例中,查詢語句可以這樣寫。
下面是使用php程式進行查詢的代碼。
上述代碼查詢openid為“o7lp5t6n59de-x3u0c7kric9qex-q”的資料,并且傳回該條記錄的username和telephone字段。執行後,傳回的内容如圖2-24所示。
4.修改資料
修改資料庫表中的資料時使用update語句。其文法如下。
在本例中,修改語句可以這樣寫:
下面是使用php程式進行修改的代碼。
上述代碼執行後,會将openid值為“o7lp5t6n59dex3u0c7kric9qex-q”的記錄中的telephone值更改為“15999521234”。
5.删除資料
從資料庫表中删除記錄時使用delete from語句。其文法如下。
在本例中,删除語句可以這樣寫。
下面是使用php程式進行删除的代碼。
上述代碼執行後,會将openid值為“o7lp5t6n59dex3u0c7kric9qex-q”的記錄删除。
1.html
html的中文名為超文本标記語言(hypertext markup language),它是一種制作頁面的标準語言,也是浏覽器使用的一種語言,而且它消除了不同計算機之間資訊交流的障礙。html是目前網絡上應用最為廣泛的語言,也是構成網頁文檔的主要語言。
html檔案是由html指令組成的描述性文本,html指令可以說明文字、圖形、動畫、聲音、表格、連結等。html檔案的結構包括頭部(head)和主體(body)兩大部分。其中,頭部描述浏覽器所需的資訊,而主體包含所要說明的具體内容。
下面是一段html代碼,它建立了一個兩行三列的表格。
上述代碼在浏覽器中運作後,效果如圖2-25所示。
2.css
css指層疊樣式表(cascading style sheet),又稱串樣式清單、層次結構式樣式表,它是一種用來為結構化文檔(如html文檔或xml應用)添加樣式(字型、間距和顔色等)的計算機語言,由w3c定義和維護。
下面是使用css建構一個水準導航欄的代碼。
上述代碼運作後,效果如圖2-26所示。
3.javascript
javascript是一種直譯式腳本語言,也是一種動态類型、弱類型、基于原型的語言,它内置支援類型。它的解釋器被稱為javascript引擎,是浏覽器的一部分。javascript是廣泛用于用戶端的腳本語言,最早在html網頁上使用,用來給html網頁增加動态功能。
下面是單擊按鈕彈出消息框的javascript代碼。
上述代碼運作後,效果如圖2-27所示。
4.xml
xml的中文名為可擴充标記語言(extensible markup language),它是一種标記語言。xml應用于web開發的許多方面,常用于簡化資料的存儲和共享。微信基礎消息的接收、發送都是使用xml來傳輸的。讀者可以在後面的章節中看到很多xml資料的内容。
下面是一個簡單的xml檔案。
5.json
json(javascript object notation)是一種輕量級的資料交換格式。它是基于javascript文法标準的一個子集。json采用完全獨立于語言的文本格式,可以很容易地在各種網絡、平台和程式之間傳輸。json的文法很簡單,易于閱讀和編寫,也易于機器解析和生成。
在微信的進階接口中,很多内容都是通過json來傳遞的。例如,建立自定義菜單時,就是通過傳輸一個固定格式的json内容來實作的。
下面是一段json内容。它定義了一個employees對象,包含兩條員工記錄(對象)的數組。