实验二 PHP基本语法实验
0 实验准备
0.1实验环境和相关工具软件
具体到的机房环境,请在Windowsxp环境下做本实验:
l 操作系统:Windowsxp
l Web服务器:Apache 2.0.63 默认发布文档路径:c:\Apache\htdocs
l PHP:PHP5.2.11 安装路径:c:\php
l 数据库:MySQL 5.1.39 使用默认路径
l 脚本编辑器:
记事本
或
EditPlus-v3.11.463H
或
Macromedia Dreamweaver MX中文版
注意:使用以上脚本编辑器,若要保存为.php文件,必须在保存时指明扩展名为.php
尤其是记事本,必须在保存时,单击“保存类型”下拉框,选择“所有文件(*.*)”类型,然后指定文件扩展名是.php,单击“保存”按钮后,保存的文件才能保证是.php文件。常见错误是直接保存,导致保存的文件其实是文本文件,如abc.php.txt等以.txt为扩展名的文本文件。
0.2实验目的和内容
实验目的:熟练掌握PHP语言的基础语法
实验内容:从7个方面完成PHP基本语法实际体验,分列如下:
一、词法结构
n 大小写
n 语句和分号
n 注释
n 标识符
二、数据类型
n 字符串型
n 布尔型
n 数组型
n 对象型
n 资源型
n 各种数据类型的检测
三、变量
n 变量的变量
n 变量的作用域
n 垃圾收集:变量的内存管理
四、表达式和操作符
n 隐式类型转换
n 字符串连接操作符
n 自增和自减操作符
n 类型转换操作符
n 其他操作符
五、流控制语句
n if语句
n switch语句
n while语句
n for语句
n foreach语句
n exit语句
n return语句(2-12)
六、包含代码
七、在Web页面中嵌入PHP
0.3 实验中的约定
所有实验程序均与讲义中的例子相对应,如程序1-1.php,对应讲义中的例子例1-1。
1词法结构
1.1大小写敏感
预备知识
变量区分大小写,内置结构(while,for,if等)及关键字(echo,class等)不区分大小写
【2-1】大小写敏感的例子
PHP程序2-1 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? $name="hello1,world1"; $NAME="hello2,world2"; $NaME="hello3,world3"; echo "\$name=$name\n"; ECHO "\$NAME=$NAME\n"; EcHo "\$NaME=$NaME"; ?> |
注意:要使运行结果达到真正分行(和HTML输出一致),请将程序2-1中的\n换成<br>,即可实现,如下例
【2-1br】修改程序2-1后的程序2-1br,直接实现分行(将程序2-1中的\n换成<br>)
PHP程序2-1br |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? $name="hello1,world1"; $NAME="hello2,world2"; $NaME="hello3,world3"; echo "\$name=$name<br>"; ECHO "\$NAME=$NAME<br>": EcHo "\$NaME=$NaME"; ?> |
原因:浏览器不解释(或者说不识别,或忽略)经PHP解释\n而成的空白换行,只有遇到<br>这个HTML中的换行标记,才解释成换行。为了直接达到预期换行效果,将不再使用\n,而是使用<br>
1.2语句和分号
预备知识
简单语句 复杂语句 分号的省略
【2-2】语句和分号
PHP程序2-2 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? if($a==$b) { echo "注意:<br>"; //简单语句 echo "\$a的值等于\$b的值<br>"; } //上面{}部分为复杂语句 echo "hello,world"; //此处分号可省略 ?> |
1.3注释
预备知识
在必要的地方做注释 注释的形式及各自的适用处:Shell形式(#)、C++形式(//)、C形式(/* … */)
【2-6】C形式的注释作用
PHP程序2-6 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? $l=12; $m=13; /*注释从这里开始 ?> <p> Some stuff you want to be HTML.</p> <?=$n=14;*/ echo ("l=$l m=$m n=$n"); ?> <p>Now <b>this</b> is regular HTML…</p> |
1.4标识符(常量标识符)
预备知识
使用define()设置常量标识符
【2-7】使用define()设置常量标识符
PHP程序2-7 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览 显示在浏览器页面中的结果) |
<? define(‘PUB’,”O’Reilly & Associates”); echo PUB; ?> |
2 数据类型
2.1字符串
预备知识
字符串的表示 单引号和双引号在字符转义上的不同作用:单引号仅转义反斜杠\和单引号’
【2-8】单引号和双引号在字符转义上的不同作用
PHP程序2-8 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? $name=”Sun Shoulong”; //双引号中的变量值将被输出 echo “Hi,$name<br>”; echo ‘Hi,$name’;//单引号中的变量名将被输出,因为单引号不认为$name是变量 ?> |
注意:双引号中的变量,若前面不加反斜杠\进行转义(将$原样输出),则在输出字串的时候将输出变量中的值
【2-9】单引号仅支持的字符转义:反斜杠\和单引号’
PHP程序2-9 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? $dos_dir=’c:\\windows\\system’; $publisher=’Tim O\’Reilly’; echo “$dos_dir $publisher”; ?> |
2.2布尔型
预备知识
PHP中为false值的情况
【2-10】判断布尔值
PHP程序2-10 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? $x=5; $y=””; if($x) echo ‘$x有一个true值<br>’; if(!$x) echo ‘$x有一个false值<br>’; if($y) echo ‘$y有一个true值<br>’; if(!$y) echo ‘$y有一个false值<br>’; ?> |
2.3数组型
预备知识:数组的创建、遍历;键名:数组元素的下标名称,一般是从0开始的整数,也可以是字符串;键值:数组元素中存储的值
【2-11】数组的创建、遍历:发明家记录
PHP程序2-11 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? #以数字键名引用的方式,通过给各数组元素赋值的方法#直接创建人名数组$person $person[0]=”Edison”; $person[1]=”Wankel”; $person[2]=”Crapper”; /*上面的方法可用array方法替代,创建后键名也是数字的,按赋值先后,从0开始依次递增 $person=array(‘Edison’,’Wankel’,’Crapper’);//一条语句 */ #以字串键名引用的方式,通过给各数组元素赋值的方法#直接创建发明家数组$creator $creator[‘Light bulb’]=”Edison”; $creator[‘Rotary Engine’]=”Wankel”; $creator[‘Toilet’]=”Crapper”; /*上面的方法可用array方法替代,创建后键名也是数字的,按赋值先后,从0开始依次递增 $creator=array(‘Light bulb’=>’Edison’, ‘Rotary Engine’=>’Wankel’, ‘Toilet’=>’Crapper’); */ #遍历数组$person,显示其内容 foreach($person as $name)//访问每个键 echo “Hello,$name<br>”; #遍历数组$creator,显示其内容 foreach($creator as $invention=>$inventor) echo “$invention was created by $inventor<br>”; ?> |
2.4对象型
预备知识
类:OOP的单元,是包含属性(变量)和方法(函数)的结构定义
类的定义
对象的创建、引用其属性和方法
【2-12】类和对象的简单例子
PHP程序2-12 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? Class Person{ var $name=’’; function name($newname=NULL){ if(!is_null($newname)) $this->name=$newname; return $this->name; }} $ed=new Person; $ed->name(‘Edison’); printf(“Hello,%s<br>”,$ed->name); $tc=new Person; $tc->name(‘Crapper’); printf(“Look out below,%s<br>”,$tc->name); ?> |
2.5资源型
预备知识:资源的概念:以数据库应用为例,在同时有众多的数据库连接存在时,要进行查询和关闭连接等操作,必须指明这些操作是对哪个连接的,所以有必要给每个连接赋予一个标识值,一般是整数。这种标识值的数据类型称为资源型。
资源的回收:程序结束时资源自动关闭,资源值被回收;作为局部变量的资源,当函数调用结束时,该变量的值自动被PHP收回;显示地关闭资源
【2-13】类和对象的简单例子
<? //连接数据库 $hostname=""; $username=""; $password=""; echo "开始建立与服务器的连接……<br>"; //$server_link为资源型变量 $server_link=@mysql_connect($hostname,$username,$password) or die ("连接服务器失败!程序中断执行!"); if($server_link) echo "与服务器的连接成功!<br>"; echo "开始打开数据库test……<br>"; //$db_link为资源型变量 $db_link=@mysql_select_db("test",$server_link) or die ("连接数据库失败!程序中断执行!"); //die是exit的别名,它们的作用是强制中断程序执行 //若程序在这里终止执行,则上面的资源型变量所占内存资源将自动回收(释放资源型变量) echo "打开数据库test成功!<br>"; echo "开始从数据库test的表abc中取出数据……<br>"; //将查询结果存入数组(遍历记录集,将记录集中的数据转到数组) $sql="select * from abc"; //$result为资源型变量 $result=mysql_query($sql,$server_link); $i=0; while($temp_array =mysql_fetch_array($result)) { $abc_array[$i][0]=$temp_array ["a"]; $abc_array [$i][1]=$temp_array ["b"]; $abc_array [$i][2]=$temp_array ["c"]; $i++; } echo "取出数据完毕!<br>"; mysql_free_result($result);//释放记录集,这是显式地关闭资源,若程序终止执行,该关闭将自动进行 echo "开始关闭与服务器的连接……<br>"; //断开数据库连接,这也是显式地使用关闭函数回收资源变量 $db_close=@mysql_close($server_link);// $db_close为布尔型变量 if($db_close) echo "关闭与服务器的连接成功!<br>"; else exit("关闭与服务器的连接失败!程序中断执行!"); echo "开始显示数据……<br>"; //将数组中的数据输出到浏览器(各列以双等号间隔) echo "a列数据==b列数据==c列数据<br>"; for($i=0;$i<count($abc_array);$i++) echo $abc_array[$i][0]."==". $abc_array[$i][1]."==". $abc_array[$i][2]."<br>"; echo "显示数据结束,程序执行完毕。"; ?> |
PHP解释结果(HTML输出)(右键单击该页面,在快捷菜单中单击“查看源文件”命令可看到)
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果)
2.6数据类型的检测
预备知识
数据类型检测函数
【2-14】数据类型检测
PHP程序2-14 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? $x=2.5; if(is_int($x)) echo '$x是整型变量'; if(is_float($x)) echo '$x是浮点型变量'; if(is_string($x)) echo '$x是字串型变量'; if(is_bool($x)) echo '$x是布尔型变量'; if(is_array($x)) echo '$x是数组型变量'; if(is_object($x)) echo '$x是对象型变量'; if(is_resource($x)) echo '$x是资源型变量'; if(is_null($x)) echo '$x是NULL型变量'; ?> |
3 变量
3.1变量的变量
预备知识
变量的概念和作用;变量的声明和使用;变量的变量
【2-15】PHP变量无类型检查,无须声明,类型随用随变
PHP程序2-15 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? #PHP变量无类型检查 $what="Fred"; echo "\$what的值=$what<br>"; if(is_string($what)) echo "\$what是字符串型变量<hr>"; $what=35; echo "\$what的值=$what<br>"; if(is_int($what)) echo "\$what是整型变量<hr>"; $what=array('Fred','35','wilma'); echo "\$what的值为:<br>"; foreach($what as $e) echo "$e<br>"; if(is_array($what)) echo "\$what是数组型变量"; ?> |
【2-16】空变量的例子
PHP程序2-16 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? #一个没有设置值的变量,它的值是NULL, #表示它是一个空变量 if($uninitialized_variable==NULL) //此句可换为: if(is_null($uninitialized_variable)) echo "\$uninitialized_variable是空变量"; ?> |
【2-17】变量的变量
PHP程序2-17 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? #变量的变量 $r='i'; $$r=1; echo "因为\$r=$r<br>"; echo "所以\$\$r=$$r<br>"; echo "又因为$$r=".$$r."<br>"; echo '故$$r='.$$r; echo "<hr>:-)你明白了吗?"; ?> |
3.2变量的作用域
预备知识
变量按其作用域分为:局部变量、全局变量。静态变量、函数的参数属于局部变量;从局部访问全局变量的方法;从全局访问局部变量的方法
【2-19】不能从全局(函数外部)直接访问局部变量
PHP程序2-19 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? #下面的函数更新了一个局部变量而不是全局变量 function update_counter(){ $counter++;//执行完本句即函数结束时,$counter的值被PHP抛弃,该变量所占内存资源被收回 } $counter=10; update_counter(); echo $counter;//这个$counter是全局变量 ?> |
【2-20】从局部访问全局变量,方法1:使用global关键字声明
PHP程序2-20 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? #在函数内访问全局变量--方法1:使用global关键字声明 function update_counter(){ global $counter;//告诉PHP,$counter是全局中那个$counter $counter++; } $counter=10; update_counter(); echo $counter; ?> |
【2-21】从局部访问全局变量,方法2:引用全局变量数组$GLOBALS
PHP程序2-21 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? #在函数内访问全局变量--方法2:引用全局变量数组$GLOBALS中键名为counter的那个元素 function update_counter(){ $GLOBALS['counter']++;//也可以写成:$GLOBALS[counter]++; } $counter=10; update_counter(); echo $counter; ?> |
【2-22】使用静态变量的好处::使全局可间接访问到
PHP程序2-22 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? #使用静态变量的方法,强制保留局部变量上 #次调用结束时的值,使全局可间接访问到 function update_counter(){ static $counter=0;//这个$counter是局部的变量,声明为静态,并赋初始值0 $counter++; echo "局部静态变量\$counter这时的值=$counter<br>"; } $counter=10;//这个$counter是全局的变量 update_counter(); update_counter(); echo "全局变量\$counter这时的值=$counter"; ?> |
【2-23】全局不可直接访问局部变量(可通过将局部变量声明为静态的方法,参见2-22)
PHP程序2-23 |
送到用户浏览器解释后显示的结果(运行结果,显示在浏览器页面中的结果) |
<? #函数参数作为一种局部变量,是不能直接被外部访问的 function greet($name){ echo "Hello,$name<br>"; } greet("孙寿龙"); if($name==null) echo '$name是一个空变量,访问不到!'; ?> |