PHP(PHP,Hypertext Preprocessor)是一种被广泛应用的开放源代码的多用途脚本语言,对数据库操作功能强大,可以嵌入到 HTML中,尤其适合 WEB 开发。
6.2.1 PHP的语法
1.PHP主要有以下特点:
(1)良好的安全性
(2)跨平台特性
(3)易学性
(4)执行速度快
(5)免费在学习PHP语法之前,先通过一个简单的PHP程序,来认识PHP程序的基本语法结构及运行方式。首先,确定在系统中安装了PHP和Apache服务器。
实例6-1 hello程序:(hello.php):
<html>
<head>
<title>PHP欢迎您</title>
</head>
<body>
<?PHP
echo "这是一个PHP脚本!"; //在浏览器中显示的文本
>
</body>
</html>
把hello.php保存在Web服务器目录,在浏览器地址栏中输入http://127.0.0.1/hello.php或http://localhoat/hello.php,就可以浏览,如图6-14所示。
 提示:
默认情况下,PHP的web文件夹为 /var/www/html/,还要启动httpd进程,为了使PHP程序能够正确执行,这个用户必须对这个文件夹有足够的权限。
其中,<?php和?>之间嵌入的代码就是PHP语句,PHP程序中每行语句以分号结束或结束标记(?>),结束标记同样隐含语句的结束;程序中echo语句是PHP中标准输出语句,用于向浏览器输出一串字符串;在浏览器中菜单上选择【查看】/【页面源代码】菜单命令,可以看到PHP源程序经过PHP编译程序编译后送到浏览器端的是标准的HTML代码,如图6-14所示,不显示原来PHP源程序,这就是PHP作为服务器端脚本语言与客户端脚本语言JavaScript和VBScript最大区别。
2.PHP分界符用来标记 PHP 代码块的标记共有四套:
<?php和?>
<script language=”PHP”> 和 </script>
<? 和?>
<% 和 %>
其中前两套总是有效,后面两套可以在php.ini配置文件中开启或者关闭。
3.PHP使用注释符
PHP 支持 C,C++ 和 Unix Shell 3种风格的注释方式:
// 这是从C++语法中借鉴过来的,只能注释一行
/* */ 这是C语言的注释符,可以注释多行
# 这是UNIX SHELL风格的注释符,只能注释一行
4.PHP数据类型
(1)常量类型
PHP 向它运行的任何脚本提供了大量的预定义常量。下面列举了几个系统常量:
True 真
False 假
PHP_OS 执行PHP解释程序的操作系统的名称,如图6-15所示
实例6-2 PHP_OS程序(php_os.php)
<html>
<head>
<title>PHP_OS </title>
</head>
<body>
<?php echo PHP_OS;?> //在浏览器中显示执行PHP解释程序的操作系统的名称
</body>
</html>
可以用 define() 函数来定义常量,如实例6-3所示,实例中省略了html的一些脚本。一个常量一旦被定义,程序中就不允许再改变或者取消定义。
实例6-3 常量定义程序(define.php)
<?php
define(PI,“3.1416”);
echo PI;
>
(2)变量类型
PHP 中一个美元符号($)后面跟上一个变量名称,即表示一个变量。变量的名称是对大小写敏感的。PHP中变量则不需事先定义,直接使用即可。对于变量的类型,在赋值时自动生成。PHP常用变量的类型分为:布尔型(boolean)、整数(integer)、浮点型(float)、字符串(string)、数组(array)、对象(object)、资源、NULL等。
① 布尔型这是最简单的类型。boolean表达了真值,可以为 TRUE 或 FALSE。要指定一个布尔值,使用关键字 TRUE 或 FALSE。两个都是大小写不敏感的。要明示地将一个值转换成 boolean,用(bool)或者(boolean)来强制转换。但是很多情况下不需要用强制转换,因为当运算符、函数或者流程控制需要一个boolean参数时,该值会被自动转换。定义方式如下,
实例6-4 布尔型变量定义程序(boolean.php)
<?php $a = True;?>
② 整型一个 integer 是集合 Z = {...,-2,-1,0,1,2,...} 中的一个数。 整型值可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号(-或者 +)。如果用八进制符号,数字前必须加上0,用十六进制符号数字前必须加上0x。
实例6-5 整型变量定义程序(integer.php)
<?php
$a = 9981; //十进制数
$b = -888; //一个负数
$c = 0127; //八进制数(等于十进制的 87)
$d = 0xDA; //十六进制数(等于十进制的 218)
>
③ 浮点型浮点数可以用以下任何语法定义:
实例6-6 浮点型变量定义程序(float.php)
<?php
$a = 4.567;
$b = 1.2e3;
$c = 8E-12;
>
④ 字符串字符串是一系列字符。字符串可以用三种字面上的方法定义。
单引号指定一个简单字符串的最简单的方法是用单引号(')括起来。要表示一个单引号,需要用反斜线(\)转义,和很多其他语言一样。如果在单引号之前或字符串结尾需要出现一个反斜线,需要用两个反斜线表示。注意如果你试图转义任何其他字符,反斜线本身也会被显示出来!所以通常不需要转义反斜线本身。
双引号如果用双引号(")括起字符串,PHP 有更多特殊字符的转义序列,如表6-1所示。
定界符另一种给字符串定界的方法使用定界符语法(“<<<”)。应该在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串。结束标识符必须从行的第一列开始。
表6-1 转义字符序列
含义
\n
换行(LF 或 ASCII 字符 0x0A(10))
\r
回车(CR 或 ASCII 字符 0x0D(13))
\t
水平制表符(HT 或 ASCII 字符 0x09(9))
\\
反斜线
\$
美元符号
\"
双引号
\[0-7]{1,3}
此正则表达式序列匹配一个用八进制符号表示的字符
\x[0-9A-Fa-f]{1,2}
此正则表达式序列匹配一个用十六进制符号表示的字符
⑤ 数组可以用array()语言结构来新建一个array。它接受一定数量用逗号分隔的key => value参数对,key可以是integer或者string,value可以是任何值。
实例6-7数组型变量定义程序(array.php)
<?php
$arr = array("a"=> "good",10 => true);
echo $arr["a"]; // good
echo $arr[10]; // 1
>
⑥ 对象对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。要初始化一个对象,用 new 语句将对象实例到一个变量中。
实例6-8对象定义程序(object.php)
<?php
class obj
{
function do_obj()
{
echo "Doing object.";
}
}
$a = new obj;
$b->do_obj ();
>
⑦ 资源一个资源是一个特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。
⑧ NULL
特殊的 NULL 值表示一个变量没有值。
5.PHP的运算符与表达式
(1) 运算符运算符是常量和变量之间的纽带PHP的运算符大部分是从C语言中借用而来的,不同的运算符优先顺序也不同,如表6-2所示。
① 算术运算符算术运算符是用来处理四则运算的符号,这是最常用的符号,包括加法(+)、减法(-)、乘法(*)、除法(/)、取模(%)等。
② 赋值运算符基本的赋值运算符是=。把右边表达式的值赋给左边运算数。赋值运算表达式的值也就是所赋的值,也就是说,$a=10的值是10。在基本赋值运算符之外,还有适合于所有二元算术运算符和字符串运算符的“组和运算符”,如+=、-=、*=、/=、%=和.=等。
③ 字符串运符有两个字符串运算符。第一个是连接运算符,就是英文的句号(.),它返回其左右参数连接后的字符串。第二个是连接赋值运算符.=。
④ 逻辑运算符逻辑运算符通常用来测试真假值。常用于循环的判断条件中,判断是否跳出循环还是继续执行循环的指令。
表6-3 逻辑运算符例子
名称
结果
$a and $b
And(逻辑与)
TRUE,如果$a与$b都为TRUE
$a or $b
Or(逻辑或)
TRUE,如果$a或$b任一为TRUE
$a xor $b
Xor(逻辑异或)
TRUE,如果$a或$b任一为TRUE,但不同时是
! $a
Not(逻辑非)
TRUE,如果$a不为TRUE
$a && $b
And(逻辑与)
TRUE,如果$a与$b都为TRUE
$a || $b
Or(逻辑或)
TRUE,如果$a或$b任一为TRUE
⑤ 比较运算符比较运算符,就是对值进行比较。除了常见的二元运算外,还有运算符是?:,称为三元运算符,和C以及很多其他语言一样。
表6-4 比较运算符例子
名称
结果
$a == $b
等于
TRUE,如果$a等于$b。
$a === $b
全等
TRUE,如果$a等于$b,并且它们的类型也相同。适用于PHP 4
$a != $b
不等
TRUE,如果$a不等于$b。
$a <> $b
不等
TRUE,如果$a不等于$b。
$a !== $b
非全等
TRUE,如果$a不等于$b,或者它们的类型不同。适用于PHP 4
$a < $b
小与
TRUE,如果$a严格小于$b。
$a > $b
大于
TRUE,如果$a严格$b。
$a <= $b
小于等于
TRUE,如果$a小于或者等于$b。
$a >= $b
大于等于
TRUE,如果$a大于或者等于$b。
除了上述的一些运算符外,PHP还有位运算符、错误控制运算符、执行运算符、加一/减一运算符、数组运算符等。
(2)表达式最基本的表达式形式是常量和变量,表达式是PHP最重要的组成部分,在PHP中,几乎所写的任何东西都是一个表达式。当你键入$a=5,即将值5分配给变量$a。5是一个值为5的表达式。
6.PHP的流程控制流程控制是程序设计中最重要的部分,因为计算机的优势就在于可以重复工作,PHP在流程控制方面,和C语言类似的循环。
(1)条件控制语句
① if语句
if 结构是很多语言包括 PHP 在内最重要的特性之一,它允许按照条件执行代码片段。语法:
if (expr)
statement
expr 按照布尔求值。如果 expr 的值为 TRUE,PHP 将执行 statement,如果值为 FALSE,将忽略statement。
② if-else语句经常需要在满足某个条件时执行一条语句,而在不满足该条件时执行其他语句,这正是 else 的功能。else 延伸了 if 语句,可以在 if 语句中的表达式的值为 FALSE 时执行语句。
语法:
if (expr)
statement1;
else
statement2;
③ elseif语句和 else 一样,它延伸了 if 语句,可以在原来的 if 表达式值为 FALSE 时执行不同语句。但是和 else 不一样的是,它仅在 elseif 的条件表达式值为 TRUE 时执行语句。例:
实例6-9 if-elseif-else程序(ifelse.php)
<?php
$a =10;
$b =20;
if ( $a > $b ) {
echo 'a比b大。';
}elseif( $a < $b ){
echo 'a比b小。';
}else{
echo 'a等于b。';
}
>
④ switch语句
switch 语句和具有同样表达式的一系列的 IF 语句相似。很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码。这正是 switch 语句的用途。语法如下:
<?php
switch(expression0){
case expression1,statement1; break;
case expression2,statement2; break;
case expression3,statement3; break;
,.....
default,statementN; break;
}
>
(2)循环控制语句
① for 循环语句
for 循环语法如下:
for (expr1; expr2; expr3) statement;
第一个表达式expr1会在循环开始时无条件执行,而且仅执行一次;第二个表达式expr2在每一次循环开始时执行,如果表达式值为真,则循环继续下面嵌套语句的执行如果表达式的值为假,则循环结束。第三个表达式expr3将在每一次循环最后执行。
② while语句
while循环语法如下:
while ( expr ) statement while
语句的含义是十分简单的,PHP在while表达式为真的情况下反复执行嵌套的语句,直到表达式的值为假循环结束。表达式在每一次循环开始的时候检查,如果表达式在一开始就为假,那么循环一次也不会执行。while 语句主要用在那些循环次数不明确的循环控制。
③ do...while语句
do...while循环语法如下:
do { statement }
while( expr )
do...while语句是先执行一次循环模块,然后再进行条件判断,无论判断条件是否满足,循环都会被执行一次。
7.PHP函数掌握一门编程语言要了解基本语法,还必须掌握该编程语言的核心:函数和对象。我们将反复用到的功能模块,写成一个函数,在需要使用时调用就可以了。并且使用函数还能减少对系统资源的耗用,因为每一次函数调用结束后,都会释放掉它所占用的资源。
(1) 函数定义:
function 函数名(形式参数列表)
{
函数体
}
① 形式参数列表是使用逗号分隔的一个变量序列,在函数体中可以把形式参数作为已经定义过的变量来使用。
② 一般函数体中通过return语句来实现返回值,返回值可以是任何数据类型。
(2) 函数调用:
函数名(实际参数列表);
① 实际参数列表要与形式参数列表相对应。若实际参数个数多于形式参数,多余部分舍去;若实际参数个数少于形式参数,缺少部分用空参数代替。
② 若函数有返回值,可以利用函数调用为变量赋值:变量名=函数名(实际参数列表)。
(3)PHP常用函数
① 字符串操作函数如: int strlen(string str) 返回字符串长度
int chop(string str) 除去字符串的尾部空格
int ltrim(string str) 除去字符串的头部空格
int trim(string str) 除去字符串的两头空格
String substr(string str,int start,int [length]) 子串截取
② 数组操作函数如:array array(…) 最常用数组创建函数
array list(…) 给一组变量一次性赋值,只能用于赋值左边,下标要连续
PHP提供了几千个函数,除了列举的字符串函数、数组函数外,还有数学运算函数、日期函数、文件函数、目录函数、图像函数、辅助函数等。
6.2.2 PHP的使用本节通过几个实例来学习PHP,了解和掌握PHP的基本应用,全面认识PHP程序的结构和编写过程。
1.在网页中显示当前时间在一个网页上经常会涉及到时间显示的问题,下面通过一个实例来介绍一下PHP时间函数的使用,显示效果如图6-16所示。
实例6-10 显示中文时间程序(time.php)
<html>
<head>
<title>中文时间显示</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>您好!现在时间是:<p>
<?php
$cweekday=array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
$now=getdate(time());
$cur_wday=$now[‘wday’];
$showtime=date("北京时间Y年m月d日H时i分s秒 $cweekday[$cur_wday]");
echo $showtime;
>
</body>
</html>
此程序首先通过array语句创建了一个cweekday的中文星期数组,time( )函数获得了当前时间,getdate( )函数用于将当前时间转换为时间信息数组,变量$cur_wday被赋值为当周第几天,最后date( )时间函数用于将时间格式化。
2.PHP与MySQL的连接动态网页的基础是数据库,首要的问题就是数据库连接的问题,下面通过一个实例来介绍一下PHP连接MySQL数据库的函数的使用,显示效果如图6-17所示。
实例6-11 数据库连接程序(testconn.php)
<?php
MySQL_connect("localhost","root","") or die(MySQL_error());
echo "Connected to MySQL
";
MySQL_select_db("school") or die(MySQL_error());
echo "Connected to school Database";
>
MySQL_connect( )带有三个参数,分别是服务器地址,MySQL的用启名和密码,输入localhost、root和空密码后,和MySQL连接成功,接下来就是选择要使用的数据库名称,任务就交给MySQL-select-db( ),来完成选择数据库school。至此,便完成了PHP与MySQL具体数据库的连接。
3.PHP处理表单表单是利用网页收集数据的工具,能较容易地对用户通过 HTML 表单提交的信息进行操作的能力一直是 PHP 的优势之一。在PHP处理表单程序中一共有两个页面文件,实例6-12的表单由两个文本域、一个单选按钮和一个文本区域组成,显示效果如图6-18所示;test.html是一个表单页面,在填入相关信息后,这个页面把填写的内容会提交到action.php页面交给PHP进行处理,显示效果如图6-9所示。
实例6-12表单页面程序(test.html)
<html>
<form method="POST" action="action.php">
<p>用户名:<input type="text" name="userName"></p>
<p>密 码:<input type="text" name="passWord"></p>
<p>性别:<input type="radio" name="sex" value="Male">男<input type="radio" name="sex" value="Female">女</p>
<p>留 言:<textarea rows="5" cols="20" name="message"></textarea></p>
<p><input type="submit" value="提交"></p>
</form>
</html>
实例6-13处理test.html程序(action.php)
<html>
<?php
if ($POST[sex]==”Male”)
{echo,$_POST[userName]先生<br>”;}
else
{echo,$_POST[userName]小姐<br>”;}
echo "你的留言是:$_POST[message]<br>";
>
</html>
从test.html页面提交过来的表单数据会组成一个$_POST数组,所有的数据都包含在这个数组里面,需要什么数据就从这个数组里面取什么数据。【用户名】的name属性值是“username”,所以【用户名】用$_POST['userName']得到,【密码】的name属性值是“password”,所以【密码】就用$_POST['passWord']得到,【性别】就用$POST[sex]。程序首先判断性别,然后打印出其他信息。