实验二 PHP基本语法实验

实验二 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为资源型变量

[email protected]_connect($hostname,$username,$password) or die ("连接服务器失败!程序中断执行!");

if($server_link) echo "与服务器的连接成功!<br>";

echo "开始打开数据库test……<br>";

//$db_link为资源型变量

[email protected]_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>";

//断开数据库连接,这也是显式地使用关闭函数回收资源变量

[email protected]_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是一个空变量,访问不到!‘;

?>

 
时间: 2024-08-28 03:18:51

实验二 PHP基本语法实验的相关文章

操作系统(实验二、作业调度模拟程序实验)

实验二.作业调度模拟程序实验 专业 商业软件工程   姓名 丘惠敏 学号 201406114203 一.        实验目的   (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.        实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 三.        实验方法.步骤及结果测试   1.   

实验二、作业调度模拟程序实验 (已修改格式)

实验二.作业调度模拟程序实验 专业:计算机科学与技术网络工程   姓名:陈玉婷  学号201306114132 一.实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 作业调度算法:1)采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业.2)短作业优先 (SJF) 调度算法,优先调度要求运行时间最短的作业.3)响应比高者优先(HRRN)调度算法,为每个作业

20145326《Java程序设计》实验二Java面向对象程序设计实验报告

20145326<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步骤 一.单元测试 1. 三种代码·伪代码·产品代码·测试代码Example:需求:我们要在一个MyUtil类中解决一个百分制成绩转成“优.良.中.及格.不及格”五级制成绩的功能. 伪代码: 百分制转五分制: 如果成绩小于60,转成“不及格” 如果成绩在60与70之间,转成“

2018-2019-1 20165221 《信息安全系统设计》实验二:固件程序设计-实验报告

2018-2019-1 <信息安全系统设计基础>实验二:固件程序设计-实验报告 实验报告由5221同学完成: http://www.cnblogs.com/0630tx/p/9904111.html 原文地址:https://www.cnblogs.com/nmsl123/p/9906006.html

20172319 实验二《树》实验报告

20172319 2018.11.04-11.12 实验二<树> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1723班 学生姓名:唐才铭 学生学号:20172319 实验教师:王志强老师 课程助教:张师瑜学姐.张之睿学长 实验时间:2018年11月04日--2018年11月12日 必修/选修:必修 目录 实验内容 实验要求 实验步骤 代码实现及解释 测试过程及遇到的问题 分析总结 代码托管 参考资料 实验内容 实验二-1-实现二叉树: 完成链树LinkedBinaryT

实验二、作业调度模拟实验

13物联网  201306104112 徐剑锋 一. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二. 实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2) 短作业

实验二、作业调度模拟程序实验

专业 :物联网工程  姓名: 梁晓旋 学号 :201306104136 一. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二. 实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最

20175213《Java程序设计》实验二Java面向对象程序设计实验报告

实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装,继承,多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 知识总结 1.伪代码 2.产品代码: ①Java编程时,程序员对类实现的测试叫单元测试. ②测试用例是为某个特殊目标而编制的一组测试输入.执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求. 3.先写测试代码,然后再写产品代码的开发方法叫"测试驱动开发"(TDD) 实验步骤 一. 单元测试 1.三种代码 ①伪

实验二 M0n0Wall 防火墙配置实验报告

1实验目的 使得用户在M0n0软件中配置,能使内网与外网互通 2 实验内容 本次内容包括安装配置M0n0.Scanner端口扫描,Metasploitable2-Linux软件IP的配置. 3 实验工具 VMware Workstation12..Win XP系统,win7系统.M0n0.Scanner端口扫描软件.Metasploitable2-Linux. 4实验步骤 4.1 M0n0 IP配置 4.1.1 需要进入M0n0软件去配置LAN的地址 4.1.2 配置wan的相关地址. 4.1.