《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——2.2 程序开发基础

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

本节书摘来自华章计算机《微信公众平台开发:从零基础到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所示。


screenshot

下面对这个程序进行讲解。

所有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所示。

screenshot

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所示。


screenshot

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所示。

screenshot

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所示。

screenshot

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”的表。

screenshot

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所示。

screenshot

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所示。


screenshot

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所示。

screenshot

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所示。


screenshot

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所示。

screenshot

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"
        }
    ]
}
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
开发者
微信公众平台开发基本配置
微信公众平台开发基本配置
84 0
|
1月前
|
移动开发 JavaScript
微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片
微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片
29 0
|
3月前
|
XML Go 数据格式
【微信公众号开发】基于golang的公众号开发——接入消息自动回复接口
【微信公众号开发】基于golang的公众号开发——接入消息自动回复接口
123 0
|
4月前
|
小程序 PHP 开发者
微信公众号开发(八)生成带参数二维码,以及将二维码下载至本地
微信的二维码真是个神奇的东西。在我们开发中,应用也是很多~ 用户扫描带场景值(参数)二维码时,可能推送以下两种事件:
61 1
|
4月前
|
XML 移动开发 小程序
微信公众号开发(七)微信h5跳转小程序及小游戏示例
最近公司做活动,需要从h5页面跳转至微信小游戏。 当时接到这个需求的时候,就在想,这玩意能相互跳转么? 后来百度了一下,还真行。
111 1
|
4月前
|
小程序 PHP
微信公众号开发(六)微信支付(发红包、企业支付到零钱)需要证书请求示例
这里最主要的就是curlpost请求的时候需要带上证书。否则请求会失败。
54 0
|
4月前
|
XML JSON 小程序
微信公众号开发(四)获取用户信息
获取用户信息,微信公众号提供了两种方式:
51 0
|
4月前
|
小程序 PHP
微信公众号开发(一)打通服务器与微信之间的通信
说来惭愧PHP做了这么久,好像就没有从头开发过一个微信公众号,这次刚好有机会从头接入开发一个完整的公众号,也不能说完整,但是这些微信的接口我基本上都试一试~看看大概是什么情况。 首先:打通服务器与微信之间的通信。
53 0
|
4月前
|
JSON 小程序 前端开发
微信公众号开发(三)设置底部菜单
填写access_token值,关于如何获取accesstoken值,请参见《微信公众号开发(二)微信公众号的access_token》 最后,将想要设置菜单的json写入body中。
108 0
|
4月前
|
JSON 小程序 数据库
微信公众号开发(二)微信公众号的access_token
微信对用户使用开放了很多的功能,如:自定义菜单接口、客服接口、获取用户信息接口、用户分组接口、群发接口,但是为了保证用户访问这些功能相对安全,每次访问都需要带上一个秘钥去验证身份。那么这个秘钥就是access_token。
63 0