19PHP综合练习题19.docx
《19PHP综合练习题19.docx》由会员分享,可在线阅读,更多相关《19PHP综合练习题19.docx(16页珍藏版)》请在冰点文库上搜索。
19PHP综合练习题19
[问答题]
1.函数的优越性有哪些?
答案:
提高程序的可维护性
提高软件的可靠性
提高程序的可重用性
提高程序的开发效率
2.如何定义一个函数?
函数名区分大小写吗?
答案:
1)使用function关键字;
2)函数命名规则和变量一样,以字母或者下划线开头,而不能以数字开头;
3)函数名不区分大小写;
4)函数名不可以使用已经声明过的或者系统自建的函数名称。
3.什么是变量的能见度或者说是变量作用域?
答案:
就是变量在程序中的可作用范围。
根据变量的能见度,变量分为局部变量和全局变量。
4.什么是局部变量和全局变量?
函数内是否可以直接调用全局变量?
答案:
局部变量是函数内部定义的变量,其作用域是所在的函数。
如果函数外还有一个跟局部变量名字一样的变量,
程序会认为它们两个是完全不同的两个变量。
当退出函数的时候,其中的局部变量就同时被清除。
全局变量是定义在所有函数以外的变量,其作用域是整个php文件,但是在用户自定义的函数内部是无法使用的。
如果一定要在用户自定义的函数内部使用全局变量,那么就需要使用global关键字声明。
也就是说如果在函数内的变量前加上golbal来修饰,那么函数内部就可以访问到这个全局变量,
不仅可以利用这个全局变量进行运算而且可以对这个全局变量进行重新赋值。
全局变量还可以使用$GLOBALS['var']来调用。
5.什么是静态变量?
答案:
如果一个函数内定义的变量前使用关键字static来声明,那么该变量就是静态变量。
一般函数内的变量在函数调用结束后,其存储的数据将被清除,所占的内存空间也被释放。
而使用静态变量时,
该变量会在函数第一次被调用时被初始化,初始化后该变量也不会被清除,当再次调用该函数时,这个静态变量不再被初始化,而能保存上次函数执行完后的值。
可以说静态变量在所有对该函数的调
用之间共享。
6.php中函数传递参数的方式有哪些?
两者有什么区别?
答案:
按值传递和按地址传递(或按引用传递)
1)按值传递:
待传递的变量,与传递给函数之后的变量是存储在不同的空间中。
所以函数体内对该变量值做的修改,不影响原本的变量值。
2)按地址传递:
使用&符号,表明该参数是以地址的方式传递值。
并不会将主程序中的指定数值或目标变量传递给函数,而是把该数值或变量的内存储存区块地址导入函数之中,所以函数体内的
该变量和主程序中的该变量在内存中是同一个。
函数体做的修改,直接影响到函数体外部的该变量的值。
7.什么是递归函数?
如何进行递归调用?
答案:
递归函数其实就是调用自身的函数,但是必须满足以下两个条件:
1)在每一次调用自身时,必须是更接近于最终结果;
2)必须有一个确定的递归终止条件,不会造成死循环。
举例说明:
在实际工作中往往会在遍历文件夹的时候使用。
如果有个例子是希望获取到目录windows下所有的文件,那么先遍历windows目录,
如果发现其中还有文件夹,那么就会调用自身,继续往下寻找,依次类推,
直到遍历到再也没有文件夹为止,这也就是意味着遍历出来了所有的文件。
8.如何判断一个函数是否存在?
答案:
function_exists(string$function_name)如果存在,返回true,不存在则返回false。
9.func()和@func()之间有什么区别?
答案:
第二个函数调用失败不会报错,第一个会报错
10.include()和require()函数的用法和区别是什么?
include_once()和require_once()呢?
答案:
include和require出现错误后的错误级别不一样
include_once()和require_once()在加载之前要判断是否已经导入
11.说出前置++和后置++的区别?
答案:
前置++是先将变量增加1,然后在将值赋值给原来的变量;
后置++是先返回变量的当前值,然后再将变量的当前值增加1)
12.字符串运算符“.”与算术运算符“+”有什么区别?
答案:
当“a”“b”之间使用.时认为是连字符。
如果两者间是+的时候php会认为是一次运算。
1)如果+号两边的字符串是数字组成的,那么会将字符串自动转为整型;
2)如果+号两边是纯粹的字母,那么会输出0;
3)如果+号两边的字符串是以数字开头的,那么会截取字符串开头的数字,然后进行运算。
13.什么是三目(或三元)运算符?
答案:
根据一个表达式的结果在另两个表达式中选择一个。
例如:
($a==truE、?
'good':
'bad';
14.控制流程语句有哪些?
答案:
1:
三种程序结构顺序结构、分支结构、循环结构
2:
分支:
if/esle/esleif/switch/case/default
3:
switch需要注意的:
case子句中的常量可以是整型、字符串型常量、或者常量表达式,不允许是变量。
同一个switch子句中,case的值不能相同,否则只能取到首次出现case中的值。
4:
循环forwhiledo...while
do...while后面必须加入分号结尾。
while和do...while的区别
5:
break和continue的区别。
break可以终止循环。
continue没有break强大,只能终止本次循环而进入到下一次循环中。
15.数组的概念是什么?
数组根据索引分为哪两种,如何区分?
数组的赋值方式有哪两种?
答案:
数组是一个可以存储一组或一系列数值的变量(复合型变量)
索引数组(索引值为数字,以0开始)和关联数组(以字符串作为索引值)
数组的赋值方式有哪两种?
数组的声明方式主要有两种。
1)通过array()函数声明数组;
可以通过key=>value的方式分别定义索引和值,也可以不定义数组的索引下标,只
给出数组的元素值。
2)直接为数组元素赋值,不需要调用array()函数。
例如:
$arr[0]=1;
$arr[1]=2;
特别注意:
数组的下标如果是等价于整数的字符串值(但不能以0开头),则会被当作整数对待。
例如:
$array[3]与$array['3']引用的是相同的一个元素,而$array['03']引用的
则就是另外的一个元素了。
16.数组如何遍历?
答案:
①for循环
②foreach循环,这是最常用的遍历方式。
用法如下:
foreach($arras$key=>$valuE、{}
③listeach和while配合起来循环
17.foeach数组的时候指针是如何指向的?
list()/each()/while()循环数组的时候指针如何指向的呢?
答案:
当foreach开始执行的时候,数组内部的指针会自动指向第一个单元。
因为foreach所
操作的是指定数组的拷贝,而不是该数组本身。
而each()一个数组后,数组指针将停留在数组中的下一个单元或者碰到数组结尾时停留在最后一个单元。
如果要再次使用each()遍历数组,必须要使用reset().
reset()将数组的内部指针倒回到第一个单元并返回第一个数组单元的值。
18.如何计算数组长度(或者说计算数组中所有元素的个数)?
字符串怎么取长度?
答案:
count()--计算数组中的元素个数。
可以使用count(数组名)或者count(数组名,1),如果有第二个参数,并且是数字1,则表示递归统计数组元素的个数。
如果第二个参数是数字0,则等同于只有一个参数的count()函数。
sizeof()--count()的别名
字符串:
strlen()、mb_strlen();
19.数组中相关的常用函数有哪些?
答案:
1)count--(sizeof别名)-计算数组中的单元数目或对象中的属性个数
例如:
intcount(mixed$var[,int$mode])$var通常都是数组类型,任何其它类
型都只有一个单元。
$mode默认值为0.1为开启递归地对数组计数
2)in_array(mixed$needle,array$haystack[,bool$strict])-检查数组中是否存在某
个值。
如果needle是字符串,则比较是区分大小写的。
如果第三个参数strict的值为TRUE则in_array()函数还会检查needle的类型
是否和haystack中的相同。
3)array_merge(array$array1[,array$array2[,array$...]])将一个或多个数组的单元合
并起来,一个数组中的值附加在前一个数组的后面。
返回作为结果的数组。
特别注意:
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。
然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引
4)数组与字符串之间的转换
1)explode(string$separator,string$string[,int$limit])使用一个分隔字符来分
隔一个字符串。
2)implode(string$glue,array$arr)使用一个连接符将数组中的每个单元连接为
一个字符串。
join为implode的别名
5)sort(array&$array[,int$sort_flags])-对数组按照值排序,当本函数结束时数组单元将被从最低到最高重新安排。
36)数组合并函数array_merge()和数组加法运算$arr+$arr2的区别是什么?
array_merge()->使用array_merge(),如果是关联数组合并,如果数组的键名相同,那么后面的值将覆盖前者;如果是数字索引数组合并,则不覆盖,而是后者附加到前者后面。
"+"->使用数组加法运算,与array_merge()不同,加法运算不管是关联数组还是数字索引数组,都是将相同键名的的值舍弃,
也就是只保留首次出现该键名的元素,后来的具有相同键名的元素都不会被加进来。
20.echo(),print(),print_r()的区别?
答案:
1)echo是语法,Outputoneormorestrings,没有返回值;
2)print是函数,不能输出数组和对象,Outputastring,print有返回值;
3)print_r是函数,可以输出数组。
print_r是个比较有意思的函数,可以输出stirng、int、
float、
array、object等,输出array时会用结构表示,print_r输出成功时返回true;而且print_r
可以通过print_r($str,truE、来,使print_r不输出而返回print_r处理后的值。
此外,对于echo
和print,基本以使用echo居多,因为其效率比print要高。
21.按照功能分类说说都有哪些字符串处理函数?
这些函数的作用是什么?
答案:
A.字符串输出函数
1)echo$a,$b,$c......;是一个语言结构,而不是一个真正的函数。
2)print($A、本函数输出字符串。
若成功则返回1,失败返回0
3)print_r($A、
4)var_dump($A、;能输出类型、长度、值
B.去除字符串首尾空格的函数:
trimltrimrtrim(别名:
chop)使用第二个参数,
还可以去除指定的字符。
C.转义字符串函数:
addslashes()
D.获取字符串长度的函数:
strlen()
E.截取字符串长度的的函数:
substr()
F.检索字符串函数:
strstr(),strpos()
G.替换字符串函数:
str_replace()
22.$arr=array('james','tom','symfony');请将$arr数组的值用’,’分割并合并成字符串输出?
答案:
echoimplode(‘,’,$arr);
23.$str=‘jack,james,tom,symfony’;请将$str用’,’分割,并把分割后的值放到$arr
数组中?
答案:
$arr=explode(‘,’,$str);
24.$arr=array(3,7,2,1,’d’,’abc’);请将$arr按照从大到小的顺序排序,并保持其键值不变?
答案:
arsort($arr);print_r($arr);
25.$mail=“gaofei@163)com”;请将此邮箱的域(163)com)取出来并打印,看最多能写
出几种方法?
答案:
echostrstr($mail,'163');
echosubstr($mail,7);
$arr=explode("@",$mail);echo$arr[1];
26.页面字符出现乱码,怎么解决?
答案:
1)首先考虑当前文件是不是设置了字符集。
查看是不是meta标签中写了charset,如果是php页面还可以看看是不是
在header()函数中指定了charset;
例如:
header(“conte-tnytpe:
text/html;charset=utf-8”);
2)如果设置了字符集(也就是charset),那么判断当前文件保存的编码格式是否跟页面设置的字符集保持一致,
两者必须保持统一;
3)如果涉及到从数据库提取数据,那么判断数据库查询时的字符集是否跟当前页面设置的字符集一致,两者必须统一,
例如:
mysql_query(“setnamesutf8”)。
27.正则表达式是什么?
php中有哪些常用的跟正则相关的函数?
请写出一个email的正则,中国手机号码和座机号码的正则表达式?
答案:
正则表达式是用于描述字符排列模式的一种语法规则。
正则表达式也叫做模式表达式。
网站开发中正则表达式最常用于表单提交信息前的客户端验证。
比如验证用户名是否输入正确,密码输入是否符合要求,email、手机号码等信息的输入是否合法。
在php中正则表达式主要用于字符串的分割、匹配、查找和替换操作。
preg系列函数可以处理。
具体有以下几个:
stringpreg_quote(stringstr[,stringdelimiter])
转义正则表达式字符正则表达式的特殊字符包括:
.\\+*?
[^]$(){}=!
<>|:
。
preg_replace--执行正则表达式的搜索和替换
mixedpreg_replace(mixedpattern,mixedreplacement,mixedsubject[,intlimit])
preg_replace_callback--用回调函数执行正则表达式的搜索和替换
mixedpreg_replace_callback(mixedpattern,callbackcallback,mixedsubject[,intlimit])
preg_split--用正则表达式分割字符串
arraypreg_split(stringpattern,stringsubject[,intlimit[,intflags]])
28.获取当前时间戳的函数主要有哪些?
用PHP打印出今天的时间,格式是2010-12-1022:
21:
21?
答案:
用PHP打印出前一天的时间格式是2010-12-1022:
21:
21?
如何把2010-12-2510:
30:
25变成unix时间戳?
echodate("Y-m-dH:
i:
s",strtotime(-1,days‘)’;)
date('Y-m-dH:
i:
s',time());
$unix_time=strtotime("2009-9-210:
30:
25");//变成unix时间戳
echodate("Y-m-dH:
i:
s",$unix_timE、;//格式化为正常时间格式
29.在url中用get传值的时候,若中文出现乱码,应该用哪个函数对中文进行编码?
用户在网站表单提交数据的时候,为了防止脚本攻击(比如用户输入),php端接收数据的时候,应该如何处理?
答案:
使用urlencode()对中文进行编码,使用urldecode()来解码。
使用htmlspecialchars($_POST[‘title’])来过滤表单传参就可以避免脚本攻击。
30.说说mysql_fetch_row()和mysql_fetch_assoc()和mysql_fetch_array之间有什么区别?
答案:
第一个是返回结果集中的一行作为索引数组,第二个是返回关联数组,而第三个既可以
返回索引数组也可以返回关联数组,取决于它的第二个参数MYSQL_BOTHMYSQL_NUM
MYSQL_ASSOC默认为MYSQL_BOTH
$sql=”select*fromtable1”;
$result=mysql_query($sql);
mysql_fetch_array($result,MYSQL_NUM);
31.文件上传需要注意哪些细节?
怎么把文件保存到指定目录?
怎么避免上传文件重名问题?
答案:
1)首现要在php.ini中开启文件上传;
2)在php.ini中有一个允许上传的最大值,默认是2MB。
必要的时候可以更改;
3)上传表单一定要记住在form标签中写上enctype="multipart/form-data";
4)提交方式method必须是post;
5)设定type="file"的表单控件;
6)要注意上传文件的大小MAX_FILE_SIZE、文件类型是否符合要求,上传后存放的路径
是否存在。
可以通过上传的文件名获取到文件后缀,然后使用时间戳+文件后缀的方式为文件重新
命名,这样就避免了重名。
可以自己设置上传文件的保存目录,与文件名拼凑形成一个文件路径,使用
move_uploaded_file(),就可以完成
将文件保存到指定目录。
32.$_FILES是几维数组?
第一维和第二维的索引下标分别是什么?
批量上传文件的时候需要注意什么?
答案:
二维数组。
第一维是上传控件的name,二维下标分别为name/type/tmp_name/size/error.
33.什么是会话控制?
答案:
简单地说会话控制就是跟踪和识别用户信息的机制。
会话控制的思想就是能够在网站中
跟踪一个变量,通过这个变量,
系统能识别出相应的用户信息,根据这个用户信息可以得知用户权限,从而展示给用户适合于其相应权限的页面内容。
目前最主要的会话跟踪方式有cookie,session。
34.会话跟踪的基本步骤
答案:
1).访问与当前请求相关的会话对象
2).查找与会话相关的信息
3).存储会话信息
4).废弃会话数据
35.使用cookie的注意事项有哪些?
答案:
1)setcookie()之前不可以有任何页面输出,就是空格,空白行也不可以;
2)setcookie()后,在当前页面调用$_COOKIE['cookiename']不会有输出,必须刷新或到下一个页面才可以看到cookie值;
3)不同的浏览器对cookie处理不同,客户端可以禁用cookie,浏览器也可以闲置cookie的数量,一个浏览器能创建的cookie数量最多300个,并且每个不可以超过4kb,
每个web站点能设置的cookie总数不能超过20个。
4)cookie是保存在客户端的,用户禁用了cookie,那么setcookie就不会起作用了。
所以不可以过度依赖cookie。
60.使用session的时候,通过什么来表示当前用户,从而与其他用户进行区分?
sessionid,通过session_id()函数可以取得当前的session_id。
36.session和cookie的使用步骤分别是什么?
什么是sesssion和cookie的生命周期?
session和cookie的区别是什么?
答案:
cookie是保存在客户端机器的,对于未设置过期时间的cookie,cookie值会保存在机器
的内存中,只要关闭浏览器则
cookie自动消失。
如果设置了cookie的过期时间,那么浏览器会把cookie以文本文件
的形式保存到硬盘中,
当再次打开浏览器时cookie值依然有效。
session是把用户需要存储的信息保存在服务器端。
每个用户的session信息就像是键值
对一样存储在服务器端,
其中的键就是sessionid,而值就是用户需要存储信息。
服务器就是通过sessionid来区
分存储的session信息是
哪个用户的。
两者最大的区别就是session存储在服务器端,而cookie是在客户端。
session安全性更
高,而cookie安全性弱。
session在web开发中具有非常重要的份量。
它可以将用户正确登录后的信息记录到服
务器的内存中,当用户以此身份
访问网站的管理后台时,无需再次登录即可得到身份确认。
而没有正确登录的用户则不
分配session空间,即便输入了
管理后台的访问地址也不能看到页面内容。
通过session确定了用户对页面的操作权限。
使用session的步骤:
1)启动session:
使用session_start()函数来启动。
2)注册会话:
直接给$_SESSION数组添加元素即可。
3)使用会话:
判断session是否为空或者是否已经注册,如果已经存在则像普通数组使用即可。
4)删除会话:
1)可以使用unset删除单个session;
2)使用$_SESSION=array()的方式,一次注销所有的会话变量;
3)使用session_destroy()函数来彻底销毁session。
cookie怎么使用?
1)记录用户访问的部分信息
2)在页面间传递变量
3)将所查看的internet页存储在cookies临时文件夹中,可以提高以后的浏览速度。
创建cookie:
setcookie(stringcookiename,stringvalue,intexpirE、;
读取cookie:
通过超级全局数组$_COOKIE来读取浏览器端的cookie的值。
删除cookie:
有两种方法
1)手工删除