PHP编程基础与实例教程第二版练习题参考答案资料 下载本文

由于时间仓促,答案中难免存在错误,不妥之处恳请读者批评指正! 第1章答案:

1.答案见教材1.2.3,1.2.4,1.2.5,1.2.6 2.答案见教材1.2.4,1.2.5 3.PHP,JSP,.NET,ASP等 4.答案如下:

打印明天的时间使用下面的程序:

date_default_timezone_set('PRC'); //设置中国时区 echo date(\ //打印明天的时间 ?>

date ()函数中:

d: 几日,两位数字,若不足则补零;从\至\ D: 星期几,3个英文字母,如:\ F: 月份,英文全名,如:\ h: 12小时制的小时,从\至\ H: 24小时制的小时,从\至\ m: 月份,两位数字,从\至\ M: 月份,3个英文字母;如:\ s: 秒;从\至\

w: 数字型的星期几,从\星期天)\至\星期六)\ Y: 年,四位数字 y: 年,两位数字

z: 一年中的第几天;从\至\

time() 函数返回当前时间的 Unix 时间戳,即:自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。

5. Apache服务器的配置文件名是httpd.conf文件,默认放在C:\\wamp\\bin\\apache\\Apache\\conf目录下。MySQL服务器的配置文件名是my.ini,默认放在C:\\wamp\\bin\\mysql\\mysql目录下,PHP预处理器配置文件名是php.ini,默认放在C:\\wamp\\bin\\apache\\Apache\\bin目录下。 6. 答案见教材1.3.5

第2章答案:

1. 答案见教材2.1.1 2. 答案见教材2.1.2 3. 答案见教材2.2.2

布尔型主要用于逻辑判断,整型和浮点型主要用于算术运算,字符串主要用于文字性描述,数组实际上是用于容纳若干变量的容器。当使用面向对象编程思想时,需要使用对象描述事物(属性及方法)。 4.

echo与print共同点:

它们都不是真正的函数,是一种语法结构,因为语句没有返回值,函数可以有返回值(即便没有用)(也有说print是函数,echo不是)。

echo和print 后面都可不用加(), 如: echo 'ok'; print 'ok';

运行速度echo稍快一些,因为echo并不返回值,print返回一个值int(1)。 echo与print区别:

一般用echo,除非三元运算时。$a=5; ($a==5) ? print '5': print 0; echo 后不要跟()。

print只能有一个参数,所以不能不能用\而echo可以。 echo -- 输出一个或者多个字符串

print_r是递归打印,主要用于打印复杂类型变量的值(如 数组,对象) 5. 答案见教材2.3 6. 答案见教材图2.3 7.

class Test{

function get_test($num){

$num=md5(md5($num)); return $num; } }

$test = new Test();

$password = $test->get_test(\echo $password;//输出字符串“123”两次md5加密结果:d9b1d7db4cd6e70935368a1efb10e377 ?>

第3章答案:

选择题: 1:C 2:B 3:A

4:D(说明:PHP变量以一个美元符号为开头,后面跟上任意数量的数字、字母和下划线。 ${“MyVar”}是一个合法的变量名,它使用的是较松散的命名约定。&$something是对$something的引用。然而,变量名不能以数字为开头,$10_somethings是非法的,因此答案是D。)

5:D(说明:这又是一个考验debug能力的题。注意到了吗,在脚本的末尾,echo语句中的?$output变量拼错了!脚本不会输出任何东西,答案是D),

6:D(说明:%运算符表示取模,它返回两个操作数相除的余数。<< 是左移运算符,相当于乘以2的N次方。最后的答案乘以了一个浮点数,改变了它的数据类型。但是,由于小数点后是零,因此输出的结果不包含小数部分。答案是 256)

7:B(说明:全等运算符比较两个操作数的数据类型和值,两者中有一个不同,都会返回False。因此答案是B)

8:AC(说明:A选项中,pow函数计算2的平方,答案是4。C选项中,左移运算符将$a的值左移两位,相当于乘以4) 9:D 10:B 填空题:

逻辑异或(xor)运算符 0 2

程序阅读题 相等相等不相等

truetruetruetruetruefalsetruefalse aaaaaa 41

hotdogok is zero 4

问答题:

1.isset($str)用于测试变量是否设置(或者存在),empty($str)用于测试变量是否为空。 检测变量是否为空使用is_null()和empty()函数。is_null()和empty()函数的区别请参考下面的程序:

var_dump(empty($a)); //输出:bool(true) echo \

var_dump(is_null($a)); //输出:bool(false) ?>

2. PHP垃圾回收机制是基于引用计数机制的垃圾回收,当一个变量的引用计数变为0时, PHP将在内存中销毁这个变量,此时启动垃圾回收机制。当一个变量被初始化或者赋值给另一个变量时引用计数会加1,当变量或者被赋值的变量被销毁或者被侦测到无用时引用计数会减一,当垃圾收集的进程运行时会释放掉引用计数为0的那些变量会被从内存中释放(垃圾回收期间程序会被中断)。当脚本执行完成时所有资源都会被释放。 3.

按值传递:函数范围内对值的任何改变在函数外部都会被忽略

按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改

区别:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。

传值只是把某一个变量的值传给了另一个变量,而引用则说明两者指向了同一个地方。 4.

if(\ echo \没有任何输出 } ?> 5.

$var2 = 7; $var3 = 8;

$max=$var1>$var2?$var1:$var2; $max=$max>$var3?$max:$var3; echo $max; ?>

第4章答案:

选择题:

1. D(说明:根据条件式的逻辑,要想得到Hello, World!字符串,必须要在第一个if结构中满足else的条件。因此$a必须为False,然后$b也必须为False。最内层的条件语句的实现要求先前的两个变量($a和$b)是False,而$c必须是True) 2.C 3.A 4.E

编程题:

switch($a) { case 'a': somefunction(); break; case 'b': anotherfunction(); break; case 'c': dosomething(); break; default: donothing(); } ?>

第5章答案:

选择题: 1.D 2.B 3.B

4.A(说明:注意,$myarray的键值并没有打上引号。所以,正在访问的键不是myvalue字符串,而是常量myvalue的值。最终访问的是$myarray[10],值是Dog,答案是A。) 5.A(说明:5.通常情况下,foreach 语句是遍历数组的首选。但是,由于foreach语句是在数组的副本上进行操作,而我们需要给数组中每个元素重新赋值,所以在这里foreach就不适用了。尽管也可以用while循环和do…while循环,但由于数组是顺序索引的,最合适的语句还是for语句。因此答案是A。) 6.C

7.E

8.B(说明:foreach操作的是$array的副本,因此对原来的值没有影响)

9.B(说明:只有asort函数能在保留原有索引关系的前提下进行排序。答案是B) 10.A 11.B,D(说明:array_flip()只能把数组中每个元素的键和值进行交换。rsort()和array_reverse()则能把题目中的数组逆向排序为需要的形式(’d’,’c’,’b’,’a’)。答案是B和D。) 12.B 13.D 14.A 15.A 16.A

问答题:

1. sort(), asort()以及ksort()三个函数之间有什么区别?在什么情况下会使用他们? 答案参见教材5.4.7 2.

$arr = array('james', 'tom', 'symfony'); echo join(',',$arr);//方法1 echo \

echo implode(',',$arr);//方法2 ?>

编程题: 第一题:

说明:当$ip是合法IP地址时,程序运行结果是1。当$ip不是合法IP地址时,程序运行结果是空字符串。

$ip = \

$flag = false;//将标记flag初始化为false

$ips = explode(\使用“.”分割字符串,将分割后的字符串放到数组中 $count = count($ips);//获取数组的长度

if($count!=4){//如果数组的长度不是4,说明是非法IP地址,退出程序 exit($flag); }

for($i =0 ; $i < $count ; $i++ ){ //IP地址的每一位必须是数字、并且在0--255区间取值 if(is_numeric($ips[$i]) && $ips[$i]>=0 && $ips[$i]<=255){ $flag = true; }else{//如果某一位不是数字,或者没有在在0--255区间取值,说明是非法IP地址,退出for循环 $flag =false; break; } }

exit($flag);