1 php入门
1.1 php标记风格
(1)以“<?php”开始,“?>”结束
<?php
//PHP代码
?>
这是本书使用的标记风格,也是最常见的一种风格。它在所有的服务器环
境上都能使用,而在XML(可扩展标记语言)嵌入PHP代码时就必须使用
这种标记以适应XML的标准,所以推荐用户都使用这种标记风格。
1.2 php程序注释
多行注释。一般是C语言风格的注释,以“/*”开始,“*/”结束
单行注释。可以使用C++风格或shell脚本风格的注释,C++风格是以
“//”开始,所在行结束时结束;
1.3 使用php输出html
echo()和print()函数
1.4 在html中嵌入php
在HTML代码中嵌入PHP代码相对来说比较简单,在1.2.6节的第一个
PHP页面就是在HTML中嵌入了PHP代码。下面是另一个在HTML中嵌入
PHP代码的例子:
<html> <head> <title>HTML中嵌入PHP</title> </head> <body> HTML文本框 <input type=text value="<?php echo '这是PHP的输出内容'?>"> </body> </html>
1.5 php中使用简单的javascript
PHP代码中嵌入JavaScript能够与客户端建立起良好的用户交互界面,强化
PHP的功能,其应用十分广泛。在PHP中生成JavaScript脚本的方法与输出
HTML的方法一样,可以使用显示函数。例如:
<?php
echo "<script>";
echo "alert('我是JavaScript! ');";
echo "</script>";
?>
【例3.1】 综合之前学习的内容,制作一个PHP和HTML、JavaScript结合的网页。
<html> <head> <title>标记应用</title> </head> <body> <p align=center><font face="黑体" size="5">HTML页面</font></p> <?php $str1="PHP变量1"; //在弹出框中显示 $str2="PHP变量2"; //在文本框中显示 echo "<script>"; echo "alert('".$str1."');";//在JavaScript中使用 $str1变量 echo "</script>"; ?> <input type="text" name="tx" size=20><br> <input type="button" name="bt" value="单击" onclick="tx.value='<?php echo $str2; ?>'"> </body> </html>
保存后运行该文件,页面弹出如图3.1所示的对话框,单击【确认】按钮后,
页面中出现一个文本框和一个名为“单击”的按钮,单击【单击】按钮,文本
框中会显示“PHP变量2”,如图3.2所示。
图3.1 javascript对话框 3.2 单击按钮后的运行效果
2.数据类型
2.1 整型
整型变量的值是整数,表示范围是-2 147 483 648~2 147 483 647。
整型值可以用十进制数、八进制数或十六进制数的标志符号指定,前面再加上可选符号
(-或+)。
八进制数符号指定,数字前必须加0;
十六进制数符号指定,数字前必须加0x。例如:
$n1=656; //十进制数
$n2=0; //零
$n3=-42; //负数
$n4=0123; //八进制数(等于十进制数的83)
$n5=0x1B; //十六进制数(等于十进制数的27)
2.2 浮点型
浮点类型也称浮点数、双精度数或实数,浮点数的字长与平台相关,最大值是
1.8e308,并具有14位十进制数的精度。例如:
$pi=3.1415926;
$length=1.3e4;
$volume=7e-10;
2.3 字符型
1. 单引号
定义字符串最简单的方法是用单引号“'”括起来。如果要在字符串中表示单引号,
则需要用转义符“\”将单引号转义之后才能输出。和其他语言一样,如果在单引
号之前或字符串结尾处出现一个反斜线“\”,就要使用两个反斜线来表示。
例如:
<?php
echo '输出\'单引号'; //输出:输出'单引号
echo '反斜线\\'; //输出:反斜线\
?>
另外一个需要注意的问题是单引号和双引号嵌套的问题,这在之前已经介绍过。
2. 双引号
使用双引号“"”将字符串括起来同样可以定义字符串。如果要在定义的字符串中
示双引号,则同样需要用转义符转义。另外,还有一些特殊字符的转义序列,如
表3.1所示
注意:如果使用“\”试图转义其他字符,则反斜线本身也会被显示出来。
使用双引号和单引号的主要区别是,单引号定义的字符串中出现的变量和转义序
列不会被变量的值替代,而双引号中使用的变量名在显示时会显示变量的值。
例如:
<?php $str="加油"; echo '中国$str!'; //输出:中国$str! echo "中国$str!"; //输出:中国加油! ?>
字符串的连接:使用字符串连接符“.”可以将几个文本连接成一个字符串,前面
已经用过。通常使用echo命令向浏览器输出内容时使用这个连接符可以避免编写
多个echo命令
<?php $str= "PHP变量"; echo "连接成". "字符串"; //字符串与字符串连接 echo $str. "连接字符串"; //变量和字符串连接 ?>
3.定界符
另一种定义字符串的方法是使用定界符“<<<”
2.4 布尔型
要想定义布尔变量,只需将其值指定为TRUE或FALSE。
2.5 数组和对象
数组是一组由相同数据类型元素组成的一个有序映射。在PHP中,映射是一种把
values(值)映射到keys(键名)的类型。数组通过array()函数定义,其值使用
“key->value”的方式设置,多个值通过逗号分隔。当然也可以不使用键名,默认
是1,2,3,…。例如:
<?php $ar1=array(1,2,3,4,5,6,7,8,9); //直接给数组赋值 $ar2=array("animal "->"tiger", "color"->"red","numer"->"12"); //为数组指定键名和值 ?>
在PHP中,是通过关键字“new”把对象实例化到一个变量中的
<?php //定义一个类 class test { var $items=0; function users() { $this->items=100; } } $newtest= new test(); //初始化对象 echo $newtest->items; //访问对象的属性 $newtest->users(); //访问对象的方法 echo $newtest->items; ?>
2.6 类型转换
PHP自动类型转换的另一个例子是加号“+”。如果一个数是浮点数,则使用加号后
其他的所有数都被当做浮点数,结果也是浮点数。否则,参与“+”运算的运算数都
将被解释成整数,结果也是一个整数。例如:
<?php
$str1="1"; //$str1为字符串型
$str2="ab"; //$str2为字符串型
$num1=$str1+$str2; //$num1的结果是整型(1)
$num2=$str1+5; //$num2结果是整型(6)
$num3=$str1+2.56; //$nun3结果是浮点型(3.56)
$num4=5+"6kb"; //$num结果为整型(11)
?>
PHP还可以使用强制类型转换,它将一个变量或值转换为另一种类型,这种转换
与C语言类型的转换是相同的:在要转换的变量前面加上用括号括起来的目标类
型。PHP允许的强制转换如下:
(int),(integer):转换成整型。
(string):转换成字符串型。
(float),(double),(real):转换成浮点型。
(bool),(boolean):转换成布尔型。
(array):转换成数组。
(object):转换成对象。
例如
<?php $var=(int)"hello"; //变量为整型(值为0) $var=(int)TRUE; //变量为整型(值为1) $var=(int)12.56; //变量为整型(值为12) $var=(string)10.5; //变量为字符串型(值为"10.5") $var=(bool)1; //变量为布尔型(值为TRUE) $var=(boolean)0; //变量为布尔型(值为FALSE) $var=(boolean)"0"; //变量为布尔型(值为FALSE) ?>
说明:
●强制转换成整型还可以使用intval()函数,转换成字符串型还可以使用strval()函
数。例如:
$var=intval("12ab3c"); //变量为整型(值为12)
$var=strval(2.3e5); //变量为字符串型(值为"2.3e5")
●在将变量强制转换为布尔类型时,当被强制转换的值为整型值0、浮点型0.0、空
白字符或字符串"0"、没有特殊成员变量的数组、特殊类型NULL时都被认为是
FALSE,其他的值都被认为是TRUE。
●如果要获得变量或表达式的信息,如类型、值等,可以使用var_dump()函数。例
如:
<?php $var1=var_dump(123); $var2=var_dump((int)FALSE); $var3=var_dump((bool)NULL); echo $var1; //输出结果为:int(123) echo $var2; //输出结果为:int(0) echo $var3; //输出结果为:bool(FALSE) ?>
结果中,前面是变量的数据类型,括号内是变量的值。
●另外一种强制转换类型的方法是使用settype()函数,语法格式如下:
bool settype(mixed $var, string $type)
bool表示返回值为布尔型。settype()函数将变量$var的类型设置为$type类
型。如果成功就返回TRUE,失败则返回FALSE。例如
<?php $var="123hello"; //$var为字符串 settype($var, "int"); //$var现在为整型(值为123) ?>
3.变量与常量
3.1 自定义变量
1. 变量名的定义
在定义变量时,变量名与PHP中其他标记一样遵循相同的规则:一个有效的变
量名由字母或下划线“_”开头,后面跟任意数量的字母、数字或下划线。
2.变量的初始化
PHP变量的类型有布尔型、整型、浮点型、字符串型、数组、对象、资源和
NULL。数据类型在前面已经做过介绍。变量在初始化时,使用“=”给变量
赋值,变量的类型会根据其赋值自动改变。例如:
$var="abc"; //$var为字符串型 $var=TRUE; //$var为布尔型 $var=123; //$var为整型 PHP也可以将一个变量的值赋给另外一个变量。例如: <?php $height=100; $width=$height; //$width的值为100 ?>
3. 变量的引用
PHP提供了另外一种给变量赋值的方式——引用赋值,即新变量引用原始变
量,改动新变量的值将影响原始变量,反之亦然。使用引用赋值的方法是,
在将要赋值的原始变量前加一个“&”符号。例如
<?php $var="hello"; //$var赋值为hello $bar=&$var; //变量$bar引用$var的地址 echo $bar; //输出结果为hello $bar="world"; //给变量$bar赋新值 echo $var; //输出结果为world ?>
注意:只有已经命名过的变量才可以引用赋值,例如下面的用法是错误的:$bar=&(25*5);
4. 变量的作用域
(1)局部变量
局部变量只是局部有效,它的作用域分为两种:
●在当前文件主程序中定义的变量,其作用域限于当前文件的主程序,
不能在其他文件或当前文件的局部函数中起作用。
● 在局部函数或方法中定义的变量仅限于局部函数或方法,当前文件
中主程序、其他函数、其他文件中无法引用。例如
<?php $my_var="test"; //$my_var的作用域仅限于当前主程序 function my_func() { $local_var=123; //$local_var的作用域仅限于当前函数 echo ' $local_var=' . $local_var ."<br>"; //调用该函数时输出结果值为123 echo ' $my_var = ' . $my_var . "<br>"; //调用该函数时输出结果值为空 } my_func(); //调用my_func()函数 echo '$my_var=' . $my_var . "<br>"; //输出结果值为"test" echo '$local_var=' . $local_var . "<br>";//输出结果值为空 ?>
在函数的局部变量里还有一个特殊的例子——静态变量。它也属于
函数中的局部变量,只不过一般变量在程序执行时,离开作用域后
其值就会消失或改变,而静态变量在程序执行时,离开作用域后其
值不会消失。静态变量使用“static”关键字来声明。
(2)全局变量:必须使用global关键字先声明为全局变量,否则视为局部
注意:函数中定义的全局变量只在函数被调用后才会有效。
5.检查变量是否存在
前面使用过isset()函数,它的作用是检查变量是否存在,语法格式如下:
bool isset ( mixed $var [, mixed $var [, $... ]] )
当变量$var已经存在,该函数将返回TRUE,否则返回FALSE。
例如:
<?php
$var1="";
$var2=123;
var_dump(isset($var1)); //返回bool(TRUE)
var_dump(isset($var2)); //返回bool(TRUE)
?>
另外,unset()函数释放一个变量。empty()函数检查一个变量是否
为空或零值,如果变量值是非空或非零值,则empty()返回FALSE,
否则返回TRUE。换句话说,""、0、"0"、NULL、FALSE、array
()、var $var,以及没有任何属性的对象都将被认为是空的。
例如:
<?php $var=0; if(empty($var)) echo "变量为空"; //输出"变量为空" ?>
3.2 可变变量
在不确定一个变量的名称时,可以使用可变变量。所谓可变变量就是一个变
量的变量名可以动态地设置和使用。一个普通变量通过声明来设置,而一个
可变变量通过获取一个普通变量的值作为它的变量名。可变变量通过两个
“$”来设置
3.3 预定义变量
又称超全局变量或自动全局变量。
1. 服务器变量$_SERVER
服务器变量是由Web服务器创建的数组,其内容包括头信息、路径、脚本位
置等信息。不同的Web服务器提供的信息也不同,本书以Apache服务器提
供的信息为例。表3.2列出了一些常用的服务器变量及其作用,使用
phpinfo()函数可以查看到这些变量信息。
PHP还可以直接使用数组的参数名来定义超全局变量,例如“$_SERVER
["PHP_SELF "]”可以直接使用$PHP_SELF变量来代替,但该功能默认是
关闭的,打开它的方法是,修改php.ini配置文件中“register_globals =
Off”所在行,将“Off”改为“On”。但是全局系统变量的数量非常多,这样
可能导致自定义变量与超全局变量重名,从而发生混乱,所以不建议开启
项功能。
例如:
<?php
echo $_SERVER["SERVER_PORT"]; //输出80
echo $_SERVER["SERVER_NAME"]; //输出localhost
echo $_SERVER["DOCUMENT_ROOT"]; //输出D:/WAMP/Apache/htdocs
?>
2. 环境变量$_ENV
环境变量记录与PHP所运行系统相关的信息,如系统名、系统路径等。单
独访问环境变量可以通过“$_ENV['成员变量名']”方式来实现。成员变
量名包括ALLUSERSPROFILE、CommonProgramFiles、
COMPUTERNAME、ComSpec、FP_NO_HOST_CHECK、NUMBER_
OF_PROCESSORS、OS、Path、PATHEXT、PHPRC、
PROCESSOR_ARCHITECTURE、PROCESSOR_IDENTIFIER、
PROCESSOR_LEVEL、PROCESSOR_REVISION、ProgramFiles、
SystemDrive、SystemRoot、TEMP、TMP、USERPROFILE、
windir、AP_PARENT_PID等。
如果PHP是测试版本,使用环境变量时可能会出现找不到环境变量的问
题。解决办法是,打开php.ini配置文件,找到“variables_order
= "GPCS"”所在的行,将该行改成“variables_order = "EGPCS"”,然
后保存,并重启Apache
3. GLOBAL变量$GLOBALS
$GLOBALS变量以数组形式记录所有已经定义的全局变量。通过
“$GOLBAL["变量名"]”的方法来引用全局变量。由于 $GLOBALS 超
全局变量可以在程序的任意地方使用,所以它比使用“global”引用全局
变量更方便。例如:
<?php $a = 1; $b = 2; function Sum() //创建Sum()函数 $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; //运算全局变量$b的值 } Sum(); echo $b; //输出结果为3 ?>
另外,PHP的预定义变量还有:
●$_COOKIE。它是由 HTTP Cookies传递的变量组成的数组。
●$_GET。它是由HTTP get方法传递的变量组成的数组。
●$_POST。它是由HTTP post方法传递的变量组成的数组。
●$_FILES。它是由HTTP post方法传递的已上传文件项目组成的数组。
●$_REQUEST。它是所有用户输入的变量数组,包括$_GET、$_POST、$_COOKIE所包含的输入内容。
● $_SESSION。它是包含当前脚本中会话变量的数组
3.4 外部变量
在程序中定义或自动产生的变量叫内部变量,而由HTML表单、URL或外部
程序产生的变量叫外部变量。外部变量可以通过预定义变量$_GET、
$_POST、$_REQUEST来获得表单可以产生两种外部变量:POST变量和
GET变量。POST变量用于提交大量的数据,$_POST变量从表单中接收
POST变量,接收方式为“$_POST['表单变量名']”;GET变量主要用于
小数据量的传递,$_GET变量从提交表单后的URL中接收GET变量,接收
方式为“$_GET['表单变量名']”。$_REQUEST变量可以取得包括
POST、GET和Cookie在内的外部变量。
【例3.2】 分别用POST和GET方法提交表单,使用$_GET、
$_POST、$_REQUEST变量接收来自表单的外部变量。 新建EX3_2.php文件,输入以下代码。
<html> <head> <title>外部变量演示</title> </head> <body> <!-- 产生POST外部变量的HTML表单form1 --> <form action="" method="post"> 学号:<input type="text" name="XH"><br> 姓名:<input type="text" name="XM"><br> <input type="submit" name="postmethod" value="POST方法提交"> </form> <!-- 产生GET外部变量的HTML表单form2 --> <form action="" method="get"> 性别:<input name="SEX" type="radio" value="男">男 <input name="SEX" type="radio" value="女">女<br> 专业:<select name="ZY"> <option>计算机</option> <option>软件工程</option> <option>信息管理</option> </select><br> <input type="submit" name="getmethod" value="GET方法提交"> </form> </body> </html> <?php //使用isset()函数判断是否是POST方法提交 if(isset($_POST['postmethod'])) { $XH=$_POST['XH']; //获取学号值 $XM=$_POST['XM']; //获取姓名值 echo "接收POST变量:<br>"; echo "学号:".$XH."<br>"; echo "姓名:".$XM."<br>"; } //使用isset()函数判断是否是GET方法提交 if(isset($_GET['getmethod'])) { $SEX=$_GET['SEX']; //GET方法获取性别值 $ZY=$_GET['ZY']; //GET方法获取专业值 echo "<br>接收GET变量:<br>"; echo "性别:".$SEX."<br>"; echo "专业:".$ZY."<br>"; } echo "<br>接收REQUEST变量:<br>"; //将REQUEST方法获取的变量列在最后 echo "学号:".@$_REQUEST['XH']."<br>"; //使用REQUEST方法获取学号 echo "姓名:".@$_REQUEST['XM']."<br>"; //使用REQUEST方法获取姓名 echo "性别:".@$_REQUEST['SEX']."<br>"; //使用REQUEST方法获取性别 echo "专业:".@$_REQUEST['ZY']."<br>"; //使用REQUEST方法获取专业 ?>
保存后运行,在学号文本框中输入“081101”,姓名文本框中输入“王林”,单击【POST方法提交】按钮,运行结果如图3.3所示。接着在性别单选按钮中选择“男”,专业选项菜单中选择“软件工程”,单击【GET方法提交】按钮,运行结果如图3.4所示。
图3.3 POST外部变量
图3.4 GET外部变量
3.5 常量
常量分为自定义常量和预定义常量。
1. 自定义常量
自定义常量使用define()函数来定义,语法格式如下:
define("常量名","常量值");
常量一旦定义,就不能再改变或取消定义,而且值只能是标量,数据类型只能是
boolean、integer、float或string。和变量不同,常量定义时不需要加“$”。
例如:
define("_KO","156");
define("CONSTANT","Hello World!");
2. 预定义常量
预定义常量也称魔术常量,PHP提供了大量的预定义常量。但是很多常量是由不同的
扩展库定义的,只有加载这些扩展库后才能使用。预定义常量使用方法和常量相同,
但是它的值会根据情况的不同而不同,经常使用的预定义常量有5个,这些特殊的常
量是不区分大小写的,如表3.3所示
4.运算符与表达式
4.1 算术运算符
PHP有6种最基本的算术运算符:加(+)、减(-)、乘(*)、除(/)、取模
(%)、取反(-)。例如:
<?php
$a=10;
$b=3;
$num=$a+$b; //加法,$num值为13
$num=$a-$b; //减法,$num值为7
$num=$a*$b; //乘法,$num值为30
$num=$a/$b; //除法,$num值为3.333333…
$num=$a%$b; //取模,$num值为1
$num=-$a; //取反,$num值为-10
?>
4.2 赋值运算符
赋值运算符的作用是将右边的值赋给左边的变量,最基本的赋值运算符是“=”。
“$a=3”表示将3赋给变量$a,变量$a的值为3。由“=”组合的其他赋值运算符还
有“+=”、“-=”、“*=”、“/=”、“.=”等。
例如:
<?php
$a=10;
$b=3;
$num=$a+$b; //将$a+$b的结果值赋给$num,$num值为13
$num=($c=6)+4 //$c的值为6,$num的值为10
$a+=6; //等同于$a=$a+6,$a赋值为16
$b-=2; //等同于$b=$b-2,$b赋值为1
$a*=2; //等同于$a=$a*2,$a赋值为32
$b/=0.5; //等同于$b=$b/0.5,$b赋值为2
$string="连接";
$string.="字符串"; //等同于$string=$string."字符串",$string赋值为"连接
//字符串"
?>
4.3 位运算符
位运算符可以操作整型和字符串型两种类型数据。它操作整型数的指定位置
位,如果左、右参数都是字符串,则位运算符将操作字符的ASCII值。表3.4列
出了所有的位运算符及其说明。
表3.4 PHP的位运算符及其说明
4.4 比较运算符
比较运算符用于对两个值进行比较,不同类型的值也可以进行比较,如果比较
的结果为真则返回TRUE,否则返回FALSE。表3.5列出了所有的比较运算符及
其说明。
说明:要注意,如果整数和字符串进行比较,字符串会被转换成整数;如果比
较两个数字字符串,则作为整数比较。其他类型之间的比较请参照表3.6。
4.5 错误控制运算符
PHP支持错误控制运算符@,将其放置在PHP表达式之前,该表达式可能产
生的任何错误信息都将被忽略。例如:
<?php
echo $a; //变量$a未定义,不加@会显示NOTICE信息
$a="Hello!";
echo $a; //输出"Hello!"
$b=@test(); //忽略调用test()函数时产生的错误信息
$cnn=@mysql_conncet("localhost","username","pwd");//忽略连
接mysql数据库出错产生的错误信息
?>
当程序产生错误时,PHP会将错误信息输出到屏幕上,使用错误控制运
算符后就不再显示这些错误信息了。由于错误控制运算符只对表达式有
效,可以将它放在变量、函数、常量等之前,而不能将它放在函数的定
义或类的定义之前,也不能用于条件结构,如if和foreach等
4.6 执行运算符
PHP支持一个执行运算符,即反引号(``)。在PHP脚本中,将外部程序的
命令行放入反引号中,并使用echo()或print()函数将其显示,PHP将会在
到达该行代码时启动这个外部程序,并将其输出信息返回,其作用效果与
shell_exec()函数相同
4.7 递增/递减运算符
PHP支持C语言风格的递增与递减运算符。PHP的递增/递减运算符主要是
对整型数据进行操作,同时对字符也有效。这些运算符是前加、后加、前
减和后减。前加是在变量前有两个“+”号,如“++$a”,表示$a 的值先
加1,然后返回 $a。后加的“+”在变量后面,如“$a++”,表示先返回
$a,然后$a的值加1。前减和后减与加法类似。例如:
<?php $a=5; //$a赋值为5 echo ++$a; //输出6 echo $a; //输出6 $a=5;
echo $a++; //输出5 echo $a; //输出6 $a=5; echo --$a; //输出4 echo $a; //输出4 $a=5; echo $a--; //输出5 echo $a; //输出4 ?> PHP还可对字符进行递增运算,不过与C语言不同的是,对
“'Z'”进行递增将得到“'AA'”,而在C中,“'Z'+1”将得到
“'['”(“Z”的ASCII码为90,“[”的ASCII码为91)。在PHP
中,字符变量只能递增,递减没有效果。
4.8 逻辑运算符
逻辑运算符可以操作布尔型数据,PHP中的逻辑运算符有6种,表3.7列
出了所有的逻辑运算符及其说明
4.9 字符串运算符
字符串运算符主要用于连接两个字符串,PHP有两个字符串运算符“.”
和“.=”。“.”返回左、右参数连接后的字符串,“.=”将右边参数附
加到左边参数后面,它可看成赋值运算符。
例如:
4.10 其他运算符
提供了数组运算符,用来对两个数组进行比较,表3.8中列出了所有的数
组运算符及其说明。PHP还有一个类型运算符instanceof,用来测定一
个给定的对象是否来自指定的对象类。
4.11 运算符优先级和结合性
一般来说,运算符具有一组优先级,也就是它们的执行顺序。运算符还有结合
性,也就是同一优先级的运算符的执行顺序,这种顺序通常是从左到右(简称
左)、从右到左(简称右)或者非结合。表3.9从高到低列出了PHP运算符的
优先级,同一行中的运算符具有相同优先级,此时它们的结合性决定了求值顺
序。
说明:表中未包括优先级最高的运算符——圆括号。它提供圆括号内部的运算
符的优先级,这样可以在需要时避开运算符优先级法则。例如:
$a=$b*(2+$c);
如果写成:
$a=$b*2+$c;
结 合 方 向 |
运 算 符 |
附 加 信 息 |
非结合 |
new |
new |
左 |
[ |
array() |
非结合 |
++ -- |
递增/递减运算符 |
非结合 |
! ~ - (int) (float) (string) (array) (object) @ |
类型 |
左 |
* / % |
算数运算符 |
左 |
+ - . |
算数运算符和字符串运算符 |
左 |
<< >> |
位运算符 |
非结合 |
< <= > >= |
比较运算符 |
非结合 |
== != === !== |
比较运算符 |
左 |
& |
位运算符和引用 |
左 |
^ |
位运算符 |
左 |
| |
位运算符 |
左 |
&& |
逻辑运算符 |
左 |
|| |
逻辑运算符 |
左 |
? : |
三元运算符 |
右 |
= += -= *= /= .= %= &= |= ^= <<= >>= |
赋值运算符 |
左 |
and |
逻辑运算符 |
左 |
xor |
逻辑运算符 |
左 |
or |
逻辑运算符 |
左 |
, |
多处用到 |
4.12 表达式
表达式是PHP最重要的基石。在PHP中,几乎所写的任何东西都是一个表达式。简单
却最精确的定义表达式就是“任何有值的东西”。最基本的表达式就是常量和变量;
一般的表达式大部分都是由变量和运算符组成的,如$a=5;再复杂一点的表达式就是
函数。下面一些例子说明了表达式的各种形式:
<?php $a=10; $b=$a++; $a>1?$a+10:$a10; function test() { return 20; } ?>
【例3.3】 利用各种运算符计算半径为10的圆的面积和上底为20、下底为30、高为10的梯形的面积。如果圆面积和梯形面积都大于50,则输出两个图形的面积。 新建EX3_3.php文件,输入以下代码: <?php define('PI',3.1415926); $C_area=2*PI*10*10; $T_area=(20+30)*10/2; if($C_area>100&&$T_area>100) { echo "圆的面积为:".$C_area."<br>"; echo "梯形面积为:".$T_area."<br>"; } ?>
5 流程控制
5.1 条件控制语句
1. if…else语句
if结构是包括PHP在内的很多语言的重要特性之一,它允许按照条件执行代码
段,和C语言的结构很相似。语法格式:
if(expr1)
//代码段1
elseif(expr2)
//代码段2
…
else
//代码段n
(1)if语句
if(expr1)语句中,expr1是一个表达式,它返回布尔值。当表达式值为TRUE
时,执行代码段1中的语句;值为FALSE时,则跳过这段代码。例如:
if($a==5) //判断$a是否等于5
{
$b=$a+5;
$a++;
}
2)elseif语句
elseif也可以隔开来写做else if。只有在要判断的条件多于两个时才会使用
到elseif语句,例如,判断一个数等于不同值的情况。elseif语句是if语句的
延伸,其自身也有条件判断的功能。只有当上面的if语句中的条件不成立即
表达式为FALSE时,才会对esleif语句中的表达式expr2进行判断。expr2的
值为TRUE则执行代码段2中的语句,值为FALSE则跳过这段代码。elseif语
句可以有很多个,例如:
<?php
$a=3;
if($a==1) //$a不等于1,跳过此代码段
{
echo "等于1";
}
elseif($a==2) //$a不等于2,跳过此代码段
{
echo "等于2";
}
elseif($a==3) //$a等于3,执行此代码段
{
echo "等于3";
}
?>
(3)else语句
else语句中不需要设置判断条件,只有当if和elseif语句中的条件都不满足时
执行else语句中的代码段。由于if、elseif和else语句中的条件是互斥的,
所以其中只有一个代码段会被执行。当要判断的条件只有两种情况时,可
以省略elseif语句。例如:
<?php
$a=5;
$b=6;
if($a==$b)
echo "a等于b";
else
echo "a不等于b";
?>
【例3.4】 编写PHP程序产生一个随机数,并让浏览者在页面上输入数字来猜测该数,并给予相应提示。 新建EX3_4.php文件,输入以下代码: <form method="post"> <input type="text" name="SZ"> <input type="submit" name="button" value="提交"> </form> <?php if(isset($_POST['button'])) //判断提交按钮是否按下 { $SZ=$_POST["SZ"];//接收文本框SZ的值 $a=rand(10,100);//使用rand()函数产生一个随机数 if($SZ>$a) //输入数的值与随机数进行比较 echo "您输入的数字太大了,请重输"; elseif($SZ<$a) echo "您输入的数字太小了,请重输"; else echo "<script>alert('您猜对啦!')</script>"; } ?>
运行结果略。
说明:rand函数的作用是产生并返回一个随机整数,语法格式如下:
int rand([int $min], [int $max]);
2. switch语句
switch语句和具有同样表达式的一系列if语句相似。在同一个变量或表达式需
要与很多不同值比较时,可使用switch语句。语法格式:
switch(var)
{
case var1:
//代码段1
break;
case var2:
//代码段2
break;
…
default:
//代码段n
}
程序中break语句的作用是跳出程序,使程序停止运行。
【例3.5】 使用switch语句判断来自表单的值。
新建EX3_5.php文件,输入以下代码。
运行结果略。
注意:switch语句只可以接收整型、浮点型和字符串变量的值。
上面的switch语句换成如下if语句效果一样
<!-- HTML表单,包含一个下拉菜单和一个提交按钮 --> <form name="form1" method="post" action=""> 兴趣爱好<select name="XQ"> <option>打篮球</option> <option>看书</option> <option>看电影</option> <option>上网</option> </select> <input type="submit" name="bt" value="提交"> </form> <?php $XQ=@$_POST["XQ"]; //接收表单的值 switch($XQ) { case "打篮球": echo "小王喜欢打篮球"; break; case "看书": echo "小王喜欢看书"; break; case "看电影": echo "小王喜欢看电影"; break; case "上网": echo "小王喜欢上网"; break; default: echo "请选择小王的兴趣爱好"; } ?>
5.2 循环控制语句
1. while循环
while循环是PHP中最简单的循环类型,当要完成大量重复性的工作时,可以
通过条件控制while循环来完成。语法格式:
while(exp)
{
//代码段
}
说明:当while()语句中表达式exp的值为TRUE时,就运行代码段中的语
句,同时改变表达式的值。语句运行一遍后,再次检查表达式exp的值,如
果为TRUE则再次进入循环,直到值为FALSE时就停止循环。如果表达式
exp的值永远都是TRUE,则循环将一直进行下去,成为死循环。如果表达
式exp一开始的值就为FALSE,则循环一次也不会运行。
例如,计算10的阶乘
<?php $sum=$m=1; //初始化 while($m<10) { $sum=$sum*$m; //累积 $m++; //$m自增1 } echo $sum; //输出362880 ?>
2. do-while循环
语法格式:
do
{
//代码段
}while(exp);
do-while循环与while循环非常相似,区别在于do-while循环首先执
行循环内的代码,而不管while语句中的exp条件是否成立。程序执行
一次后,do-while循环才来检查exp值是否为TRUE,为TRUE则继续
循环,为FALSE则停止循环。而while循环是首先判断条件是否成立
才开始循环。所以当两个循环中的条件都不成立时,while循环一次也
没运行,而do-while循环至少要运行一次。例如:
<?php $n=1; do { echo $n ."<br>"; $n++; }while($n<10); ?>
3. for循环
for循环是PHP中比较复杂的一种循环结构,语法格式如下:
for(expr1;condition;expr2)
//代码段
说明:表达式expr1在循环开始前无条件求值一次,这里通常设置一个初
始值。表达式condition是一个条件,在循环开始前首先测试表达式
condition的值。如果为FALSE则结束循环,如果为TRUE则执行代码段
中的语句,循环执行完一次后执行表达式expr2,之后继续判断
condition的值,如果为TRUE则继续循环,如果为FALSE则结束循环。
例如:
<?php
$m=10;
for($i=0;$i<$m;$i++)
{
echo $i."<br>";
}
?>
for循环中的每个表达式都可以为空,但如果condition为空则PHP认
为条件为TRUE,程序将无限循环下去,成为死循环,如果要跳出循
环,需要使用break语句,例如:
<?php for($i=0;;) { if($i>10) { break; //如果$i大于10则跳出循环 } echo $i. "<br>";//输出$i
$i++; //$i加1 } ?>
另外,for循环也可以和其他循环嵌套使用。
【例3.6】 使用for循环打印九九乘法表。
新建EX3_6.php文件,输入以下代码:
<?php for($i=1;$i<=9;$i++) //第一层for循环 { for($j=1;$j<=$i;$j++) //第二层for循环 { echo "$i*$j=".$i*$j." "; //输出乘法口诀 if($j==$i) //如果行数等于列数就回车 echo "<br>"; } } ?>
【例3.7】 使用循环输出一个5行4列的表格
<?php $i=0; echo "<table width=200 border=1 align=center>"; //输出表格的头 while($i<5) //使用while循环输出表格的行 { echo "<tr>"; //每行的开头 for($j=1;$j<5;$j++) //使用for循环输出表格的列 { echo "<td>".$j."</td>"; //每列上显示$j的值 } echo "</tr>"; //每行的结尾 $i++; //进入下一行 } echo "</table>"; ?>
4. foreach循环
foreach语句也属于循环控制语句,但它只用于遍历数组,当试图将其用
于其他数据类型或者一个未初始化的变量时会产生错误。有关foreach循
环的内容将在介绍数组时讨论。
1. break控制符
break控制符在前面已经使用过,这里具体介绍。它可以结束
当前for、foreach、while、do-while或switch结构的执
行。当程序执行到break控制符时,就立即结束当前循环。
例如:
<?php $i=1; while($i<10) { if($i>3) break; //当$i>3时结束while循环 echo $i."<br>"; //输出$i,$i最后输出的值只有1,2,3 $i++; //$i自增1 } ?> 循环语句嵌套使用时,break控制符还可以在后面加一个可选的数
字来决定跳出哪一层循环
<?php for($n=0;$n<10;$n++) { while(true) { switch($n) { case 2: echo $n; break; //跳出switch case 4 echo $n; break 1;//跳出switch case 6 echo $n; break2;//跳出while循环 case 8 echo $n; break3; //跳出for循环 } n++; } } ?>
2. continue控制符
continue控制符用于结束本次循环,跳过剩余的代码,
并在条件求值为真值时开始执行下一次循环。例如:
<?php $m=5; for($n=0;$n<10;$n++) { if($n==$m) continue; //跳出本次循环 echo $n; //输出的结果是012346789 } ?> 和break控制符一样,continue控制符在循环语句嵌套
使用时,也可在后面加一个可选的数字来决定跳出哪一层
循环,例如
<?php for($n=0;$n<15;$n++) { while(1) //while循环是无限循环 { echo $n++; if($n==10) continue 2; //跳出本次的for循环 if($n>15) break; // $n >15时结束while循环 } } ?>
3. return控制符
在函数中使用return控制符,将立即结束函数的执行并
将return语句所带的参数作为函数值返回。在PHP的脚本
或脚本的循环体内使用return,将结束当前脚本的运
行。例如
<?php $n=5; for($i=1;$i<10;$i++) { if($i>$n) { return; //当$i>5时结束脚本运行 echo "大于5"; //此处不输出任何内容 } echo $i ." "; //输出1 2 3 4 5 } ?>
4. exit控制符
exit控制符也可结束脚本的运行,用法和return控制
符类似。例如
<?php $a=5; $b=6; if($a<$b) exit; //如果$a<$b则结束脚本 echo $a."小于".$b; //不输出 ?> 但exit和return的不同之处在于,当前文件包含另外的
文件时,若在被包含文件中执行exit ,则当前文件被包
含文件下面的代码都会停止运行,而return则中止当前
文件中的代码的
5.3 流程控制符
这4种语句的用法类似,不同之处在于:
●include()包含文件发生错误时,如包含的文件不存在,脚本将发出一个
警告,但脚本会继续运行。
●require()包含文件发生错误时,会产生一个致命错误并停止脚本的运
行。
●include_once()使用方法和include()相同,但如果在同一个文件中使
用include_once()函数包含了一次指定文件,那么此文件将
不被再次包含。
●require_once()使用方法和require()相同,但如果在同一个文件中使
用require_once()函数包含了一次指定文件,那么此文件将不
被再次包含。
在包含文件时,函数中要指定正确的文件路径和文件名。如果不指定路径或者路径为“./”,则在当前运行脚本所在目录下寻找该文件,如include('1.php')或include('./1.php')。如果指定文件的路径为“../”,则在Apache的根目录下寻找该文件,如include('../1.php')。如果要指定根目录下不是当前脚本所在目录下的文件,可以指定其具体位置,如include('../david/1.php')
例如,假设a.php和b.php文件都在当前工作目录下: a.php中代码为: <?php $color = 'green'; $fruit = 'apple'; ?> b.php中代码为: <?php echo "A $color $fruit"; //输出"A",并给出变量未定义的通知 include 'a.php'; //包含a.php文件 echo "A $color $fruit"; //输出"A green apple" ?>
5.4 流程控制的替代语法
5.5 包含文件操作
5.6 实例-回答多项选择题
【例3.8】 综合前面所学的流程控制的内容,编写回答多项选择题的PHP程序。
题目要求如下:以下属于Web开发语言的有哪几种?供选择答案:C语言、
PHP、FLASH、ASP、JSP。正确答案:PHP、ASP、JSP。
新建EX3_8.php文件,输入以下代码。
<form action="" method="post" > 以下属于Web开发语言的有哪几种?<br> <input type="checkbox" name="answer[]" value="C语言">C语言<br> <input type="checkbox" name="answer[]" value="PHP">PHP<br> <input type="checkbox" name="answer[]" value="FLASH">FLASH<br> <input type="checkbox" name="answer[]" value="ASP">ASP<br> <input type="checkbox" name="answer[]" value="JSP">JSP<br> <input type="submit" name=bt_answer value="提交" /> </form> <?php if(isset($_POST['bt_answer'])) { $answer=@$_POST['answer']; //$answer是数组 if(!$answer) echo "<script>alert('请选择答案')</script>"; $num = count($answer); //使用count函数取得$answer数组中值的个数 $anw=""; //初始化$anw为空 for($i=0;$i<$num;$i++) //使用for循环 { $anw=$anw.$answer[$i]; //将$answer中的值连接起来 } if($anw=="PHPASPJSP") //判断是否是正确答案 echo "<script>alert('回答正确!')</script>"; //弹出提示框提示正确 else echo "<script>alert('回答错误!')</script>"; //弹出提示框提示错误 } ?>
运行结果如图3.8所示。
说明:在程序中,复选框的名称都为”answer[]”,当php从表单中”answer”中取到的是一个数组,复选框值就存入这个数组中。count()函数返回一个数组中值的个数