本节书摘来自华章计算机《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》一书中的第2章,第2.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是目前最为成熟、稳定、安全的企业级Web开发技术。其成熟的架构、稳定的性能、嵌入式开发方式、简洁的语法,使得系统能迅速开发。百度网站前端使用的就是PHP,你可以在浏览器中输入http://www.baidu.com/index.php打开百度的首页。
除了PHP和MySQL之外,HTML、CSS样式表和脚本语言JavaScript也是Web开发的基础,一般使用HTML来设计Web页面的结构,使用CSS样式表来控制Web页面的显示效果,使用脚本语言来控制浏览器的特效及表单数据的验证。掌握这些有助于开发者开发出更丰富和更强大的功能。
2.2.1 PHP语法及使用
PHP的语法和C、C++等语言的语法很相似,有C语言基础的读者,可以非常轻松地掌握PHP的基本语法。由于PHP的语法比较简单,即使没有任何开发语言基础,也可以快速熟悉它。
1.第一个程序
打开编辑器Notepad++,在其中编写如下内容。
<?php
// 作者:方倍
echo "你好,微信!";
?>
将上述内容保存为hello.php,并且存放在WAMP的Web根目录c:wampwww下,然后在浏览器中输入http://localhost/hello.php ,可以看到浏览器显示出“你好,微信!”,如图2-15所示。
下面对这个程序进行讲解。
所有PHP代码都是以“<?php”开头,以“?>”结尾的,PHP的默认文件扩展名是“.php”。“//”表示该行是注释,它的作用是供代码开发者阅读,不会被程序执行,因此代码中的“作者:方倍”就没有在浏览器中显示。echo是PHP的一个语句,它的作用是将一串字符显示出来,所以在浏览器中看到了“你好,微信!”这一段内容。
2.变量及类型
变量是指程序中可以改变的数据量,变量需有一个名字,用来代表变量和存放变量的值。PHP中使用美元符号“$”后跟变量名来表示一个变量,如“$result”。PHP的变量主要有以下类型:整数类型、浮点类型、字符串类型、布尔类型、数组类型、对象。下面是整型、浮点型、字符串类型的示例代码。
<?php
$x = 100; // 整型
$y = 100.33; // 浮点型
$hello ="Hello world!"; // 字符串类型
echo $x;
echo "<br>";
echo $y;
echo "<br>";
echo $hello;
?>
上述代码分别定义了一个整数类型变量和一个浮点类型变量和一个字符串类型变量。它在浏览器中的运行效果如图2-16所示。
3.常量
PHP中通过define()函数定义常量。合法的常量名只能以字母和下划线开始,后面可以跟任意字母、数字或下划线。常量一旦定义就不能再修改或者取消定义。常量定义的示例代码如下。
<?php
define("TOKEN", "weixin");
echo TOKEN;
?>
上述代码定义名为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的值。
下述代码是常用运算符的示例。
<?php
$x=10;
$y=6;
echo ($x + $y); // 输出 16
echo "<br>";
echo ($x - $y); // 输出 4
echo "<br>";
echo ($x * $y); // 输出 60
echo "<br>";
echo ($x / $y); // 输出 1.6666666666667
echo "<br>";
echo ($x % $y); // 输出 4
echo "<br>";
$z=5;
$z *= 6;
echo $z; // 输出 30
echo "<br>";
$x="Hello";
$x .= " weixin!";
echo $x; // 输出 Hello weixin!
echo "<br>";
$i=5;
echo $i--; // 输出 5
echo "<br>";
$a=50;
$b=90;
var_dump($a > $b);
$max = ($a>=$b) ? $a : $b;
echo $max; // 输出 90
?>
在浏览器中的运行效果如图2-18所示。
5.流程控制
PHP程序由语句构成,通常情况下,程序从第一条语句开始执行,按顺序执行到最后一句。但有时因为某些原因,需要改变程序的执行顺序,这就需要对程序的流程进行控制。
PHP程序的执行方式有3种:顺序执行、选择执行、循环执行。通过使用这3种控制结构,可以改变程序的执行顺序,以满足解决问题的需求。顺序结构使程序从第一条语句开始,按顺序执行到最后一句。在选择结构中,程序可以根据某个条件是否成立,选择执行不同的语句。在循环结构中,程序可以根据某种条件和指定的次数,使某些语句执行多次。
(1)if语句/if...else语句/if...elseif...else语句
- 在PHP中,可以使用以下条件语句。
- if语句:如果指定条件为真,则执行代码。
- if...else语句:如果条件为真,则执行代码;如果条件为假,则执行另一段代码。
- if...elseif...else语句:选择若干代码块之一执行。
下述代码是if语句系列的使用方法。
<?php
$t=date("H");
if ($t<"18") {
echo "白天!";
}
if ($t<"18") {
echo "白天!";
} else {
echo "晚上!";
}
if ($t<"12") {
echo "上午!";
} elseif ($t<"18") {
echo "下午!";
} else {
echo "晚上!";
}
?>
上述代码的含义解读如下。
在if语句中,如果当前时间(HOUR)小于18,则输出“白天!”。
在if...else语句中,如果当前时间(HOUR)小于18,则输出“白天!”,否则输出“晚上!”。
在if...elseif...else语句中,如果当前时间(HOUR)小于12,则输出“上午!”;如果大于12且小于18,则输出“下午!”;否则输出“晚上!”。
(2)switch语句
switch语句首先计算表达式expr的值,如果expr的值与某个case的值匹配,则从该case后面的语句开始执行,直到遇到break语句或整个switch语句结束。
switch语句的使用示例如下。
<?php
switch ($x)
{
case 1:
echo "数字 1";
break;
case 2:
echo "数字 2";
break;
case 3:
echo "数字 3";
break;
default:
echo "不是1至3之间的数字";
}
?>
在上述代码中,判断变量$x的值,将它与case的值进行比较。如果存在匹配的case,则执行与该case关联的代码。如果没有case为真,则执行default中的代码。
(3)for循环
for循环执行代码块指定的次数。下面的例子显示了从0到3的数字。
<?php
for ($x=0; $x<=3; $x++) {
echo "数字是:$x <br>";
}
?>
其运行效果如图2-19所示。
(4)while循环
while循环当指定条件为真时执行代码块。
下面的例子首先把变量$x设置为1($x=1),然后执行while循环(只要$x小于或等于5)。循环每运行一次,$x将递增1。
<?php
$x=1;
while($x<=5) {
echo "这个数字是:$x <br>";
$x++;
}
?>
其运行效果如图2-20所示。
6.数组
数组能够在一个变量名中存储许多值,并且能够通过引用下标号来访问某个值。
在PHP中,创建数组使用array()函数。常用的数组类型有索引数组和关联数组。
索引数组的索引是自动分配的(索引从0开始)。下面的代码创建了一个索引数组。
$office = array('word', 'excel', 'outlook', 'access');
该数组的名称为office,第一个元素的值是word,第二个元素的值是excel,第三个元素的值是outlook,第四个元素的值是access。
关联数组的创建方法如下。
array( [key =>]value , ... )// key 可以是 integer 或者 string;value 可以是任何值
下面的代码创建了一个关联数组。
$age=array("张三"=>"25","李四"=>"27","王五"=>"33");
它定义了3个元素,以“张三”、“李四”、“王五”为键名,他们的年龄为各自的值。
实际上,索引数组是一种特殊的关联数组。
下面演示了创建及遍历数组的方法。
<?php
$office = array('word', 'excel', 'outlook', 'access');
$arrlength=count($office);
for($x=0;$x<$arrlength;$x++) {
echo $office[$x];
echo "<br>";
}
$age=array("张三"=>"25","李四"=>"27","王五"=>"33");
foreach($age as $key=>$value) {
echo "Key=" . $key . ", Value=" . $value;
echo "<br>";
}
?>
程序执行的效果如图2-21所示。
7.函数
在程序设计中,经常将一些常用的功能模块编写成函数,供程序或其他文件使用。函数就像一些小程序,用它们可以组成更大的程序。用户定义的函数声明以“function”开头。
这里创建了名为“familyName()”的函数。左花括号“{”表示函数代码的开始,而右花括号“}”表示函数的结束。
下面例子中的函数有两个参数$name和$year。当调用familyName()函数时,同时要传递名字(如“三”)和出生年(如1980),这样会输出姓相同但名不同的姓名,以及出生年。
<?php
function familyName($name, $year) {
echo "张$name. 出生于$year <br>";
}
familyName("三","1980");
familyName("四","1982");
familyName("五","1985");
?>
上述程序执行的效果如图2-22所示。
8.类
类是变量与作用于这些变量的函数的集合。变量通过var定义,函数通过function定义,而类通过下面的语法定义。
<?php
class Cart {
var $items; // 购物车中的物品
// 将 $num 个 $artnr 物品加入购物车
function add_item($artnr, $num) {
$this->items[$artnr] += $num;
}
}
?>
上面的例子定义了一个Cart类,这个类由购物车中的商品构成的数组和一个用于向购物车中添加商品的函数组成。
类的用法举例如下。
<?php
$cart = new Cart;
$cart->add_item("手机", 3);
?>
上述代码创建了一个Cart类的对象$cart,对象$cart的方法add_item()被调用时,添加了3件“手机”商品。
2.2.2 MySQL的使用
本小节演示如何使用SQL语句及PHP程序创建和使用一个简单的数据库表。
表2-1所示是一个名为“wx_user”的表。
wx_user表含有4个列(id、openid、username及telephone)和两条记录(每条记录对应一个人)。
1.创建数据库表
下面是建立一个数据库表“wx_user”的SQL脚本。
CREATE TABLE IF NOT EXISTS 'wx_user' (
'id' int(7) NOT NULL AUTO_INCREMENT,
'openid' varchar(30) NOT NULL,
'username' varchar(20) NOT NULL,
'telephone' varchar(16) NOT NULL,
PRIMARY KEY ('id'),
UNIQUE KEY 'openid' ('openid')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
创建数据库表时使用CREATE TABLE命令。命令中间部分的内容是创建条件,包括列名、列的数据类型及长度、是否允许为空、是否有自增属性、是否是唯一Key、是否为主键等。
在phpMyAdmin的SQL运行框中,运行上述代码后,将创建一个名为“wx_user”的表,如图2-23所示。
2.插入数据
向数据库表插入数据时使用INSERT INTO语句。其语法如下。
INSERT INTO table_name VALUES (value1, value2,...)
在本例中,插入语句可以这样写。
INSERT INTO 'wx_user' ('id', 'openid', 'username', 'telephone') VALUES (NULL,
'o7Lp5t6n59DeX3U0C7Kric9qEx-Q', '方倍', '15987654321');
下面是使用PHP程序进行提交的代码。
<?php
$con = mysql_connect("localhost:3306","root","root");
mysql_query("SET NAMES 'UTF8'");
mysql_select_db("book", $con);
mysql_query("INSERT INTO 'wx_user' ('id', 'openid', 'username', 'telephone')
VALUES (NULL, 'o7Lp5t6n59DeX3U0C7Kric9qEx-Q', '方倍', '15987654321');");
mysql_query("INSERT INTO 'wx_user' ('id', 'openid', 'username', 'telephone')
VALUES (NULL, 'o7Lp5t6n59De2380C3Kxkc93E2x3', '李四', '13412341234');");
mysql_close($con);
?>
在上述代码中,首先创建到数据库的连接,这是通过mysql_connect()函数完成的,连接的主机为“localhost”,端口为“3306”,账号和密码都为“root”。然后通过“SET NAMES 'UTF8'”命令设置字符集为UTF8,这样就能正常显示中文。之后通过mysql_select_db()函数设置要连接的数据库“book”。最后使用mysql_query()函数向wx_user表中插入两条记录。执行完毕后,使用mysql_close()函数关闭MySQL连接。
3.查询数据
从数据库中查询数据时使用SELECT语句。其语法如下。
SELECT column_name(s) FROM table_name
在本例中,查询语句可以这样写。
SELECT * FROM 'wx_user' WHERE 'openid' = 'o7Lp5t6n59DeX3U0C7Kric9qEx-Q';
下面是使用PHP程序进行查询的代码。
<?php
$con = mysql_connect("localhost:3306","root","root");
mysql_query("SET NAMES 'UTF8'");
mysql_select_db("book", $con);
$result = mysql_query("SELECT * FROM 'wx_user' WHERE 'openid' = 'o7Lp5t6n59DeX3U
0C7Kric9qEx-Q';");
while($row = mysql_fetch_array($result))
{
echo $row['username']." ".$row['telephone'];
echo "<br />";
}
mysql_close($con);
?>
上述代码查询openid为“o7Lp5t6n59De-X3U0C7Kric9qEx-Q”的数据,并且返回该条记录的username和telephone字段。执行后,返回的内容如图2-24所示。
4.修改数据
修改数据库表中的数据时使用UPDATE语句。其语法如下。
UPDATE table_name SET column_name = new_value WHERE column_name = some_value
在本例中,修改语句可以这样写:
UPDATE 'wx_user' SET 'telephone' = '15999521234' WHERE 'openid' = 'o7Lp5t6n59DeX3U
0C7Kric9qEx-Q';
下面是使用PHP程序进行修改的代码。
<?php
$con = mysql_connect("localhost:3306","root","root");
mysql_query("SET NAMES 'UTF8'");
mysql_select_db("book", $con);
mysql_query("UPDATE 'wx_user' SET 'telephone' = '15999521234' WHERE 'openid' =
'o7Lp5t6n59DeX3U0C7Kric9qEx-Q';");
mysql_close($con);
?>
上述代码执行后,会将openid值为“o7Lp5t6n59DeX3U0C7Kric9qEx-Q”的记录中的telephone值更改为“15999521234”。
5.删除数据
从数据库表中删除记录时使用DELETE FROM语句。其语法如下。
DELETE FROM table_name WHERE column_name = some_value
在本例中,删除语句可以这样写。
DELETE FROM 'wx_user' WHERE 'openid' = 'o7Lp5t6n59DeX3U0C7Kric9qEx-Q';
下面是使用PHP程序进行删除的代码。
<?php
$con = mysql_connect("localhost:3306","root","root");
mysql_query("SET NAMES 'UTF8'");
mysql_select_db("book", $con);
mysql_query("DELETE FROM 'wx_user' WHERE 'openid' = 'o7Lp5t6n59DeX3U0C7Kric9qEx
-Q';");
mysql_close($con);
?>
上述代码执行后,会将openid值为“o7Lp5t6n59DeX3U0C7Kric9qEx-Q”的记录删除。
2.2.3 其他常用语言
1.HTML
HTML的中文名为超文本标记语言(Hypertext Markup Language),它是一种制作页面的标准语言,也是浏览器使用的一种语言,而且它消除了不同计算机之间信息交流的障碍。HTML是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言。
HTML文件是由HTML命令组成的描述性文本,HTML命令可以说明文字、图形、动画、声音、表格、链接等。HTML文件的结构包括头部(Head)和主体(Body)两大部分。其中,头部描述浏览器所需的信息,而主体包含所要说明的具体内容。
下面是一段HTML代码,它创建了一个两行三列的表格。
<html>
<head>
<title>HTML</title>
</head>
<body>
<h4>两行三列:</h4>
<table border="1">
<tr>
<td>100</td>
<td>200</td>
<td>300</td>
</tr>
<tr>
<td>400</td>
<td>500</td>
<td>600</td>
</tr>
</table>
</body>
</html>
上述代码在浏览器中运行后,效果如图2-25所示。
2.CSS
CSS指层叠样式表(Cascading Style Sheet),又称串样式列表、层次结构式样式表,它是一种用来为结构化文档(如HTML文档或XML应用)添加样式(字体、间距和颜色等)的计算机语言,由W3C定义和维护。
下面是使用CSS构建一个水平导航栏的代码。
<html>
<head>
<style>
ul{
list-style-type:none;
margin:0;
padding:0;
overflow:hidden;
}
li{
float:left;
}
a{
display:block;
width:60px;
background-color:#dddddd;
}
</style>
</head>
<body>
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#news">News</a></li>
<li><a href="#contact">Contact</a></li>
<li><a href="#about">About</a></li>
</ul>
</body>
</html>
上述代码运行后,效果如图2-26所示。
3.JavaScript
JavaScript是一种直译式脚本语言,也是一种动态类型、弱类型、基于原型的语言,它内置支持类型。它的解释器被称为JavaScript引擎,是浏览器的一部分。JavaScript是广泛用于客户端的脚本语言,最早在HTML网页上使用,用来给HTML网页增加动态功能。
下面是单击按钮弹出消息框的JavaScript代码。
<!DOCTYPE html>
<html>
<body>
<p>JavaScript 能够对事件作出反应。比如对按钮的点击:</p>
<button type="button" onclick="alert('Welcome!')">点击这里</button>
</body>
</html>
上述代码运行后,效果如图2-27所示。
4.XML
XML的中文名为可扩展标记语言(Extensible Markup Language),它是一种标记语言。XML应用于Web开发的许多方面,常用于简化数据的存储和共享。微信基础消息的接收、发送都是使用XML来传输的。读者可以在后面的章节中看到很多XML数据的内容。
下面是一个简单的XML文件。
<xml>
<to>张三</to>
<from>李</from>
<heading>提醒</heading>
<body>记得开会</body>
</xml>
5.JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它是基于JavaScript语法标准的一个子集。JSON采用完全独立于语言的文本格式,可以很容易地在各种网络、平台和程序之间传输。JSON的语法很简单,易于阅读和编写,也易于机器解析和生成。
在微信的高级接口中,很多内容都是通过JSON来传递的。例如,创建自定义菜单时,就是通过传输一个固定格式的JSON内容来实现的。
下面是一段JSON内容。它定义了一个employees对象,包含两条员工记录(对象)的数组。
{
"employees": [
{
"firstName": "Bill",
"lastName": "Gates"
},
{
"firstName": "George",
"lastName": "Bush"
}
]
}