试题PHP面试题四.docx
《试题PHP面试题四.docx》由会员分享,可在线阅读,更多相关《试题PHP面试题四.docx(16页珍藏版)》请在冰豆网上搜索。
![试题PHP面试题四.docx](https://file1.bdocx.com/fileroot1/2023-6/23/5db7f704-24aa-40f5-b6bb-1975581122b3/5db7f704-24aa-40f5-b6bb-1975581122b31.gif)
试题PHP面试题四
php面试题(四)
1.变量如何定义?
2.如何检查变量是否定义?
isset()
3.如何删除一个变量?
unset()
4.判断一个变量是否为空的函数?
empty()
5.什么是可变变量?
获取一个普通变量的值作为这个可变变量的变量名。
6.php中变量有哪些基本数据类型?
php支持8种原始数据类型。
包括:
四种标量类型(布尔型boolean,整型integer,浮点型float/double,字符串string)
两种复合类型(数组array,对象object)
两种特殊类型(资源resource,NULL)
7.其它类型转换为boolean类型时,哪些被认为是false?
布尔值false,整型值0,浮点型值0.0,空白字符串,字符串'0',空数组,空对象,特殊
数据类型NULL,没有设定的变量。
8.标量数据和数组的最大区别是什么?
一个标量只能存放一个数据,而数组可以存放多个数据。
9.常量如何定义?
如何检测一个常量是否被定义?
define(),defined()
10.常量的值只能是哪些数据类型?
常量的值只能是标量类型的数据。
11.常量分为系统内置常量和自定义常量。
请说出最常见的几个系统内置常量?
__FILE__,__LINE__,PHP_OS,PHP_VERSION
12.如果定义了两个相同的常量,前者和后者哪个起作用?
前者起作用,因为常量一旦定义就不能被重新定义或者取消定义。
13.常量和变量有哪些区别?
1)常量前没有$符号;
2)常量只能通过define()定义,而不能通过赋值语句定义;
3)常量可以在任何地方定义和访问,而变量定义的访问有固定的规则;
4)常量一旦定义就不能被重新定义或者取消定义,而变量而通过赋值方式重新定义;
5)常量的值只能是标量数据,而变量的数据库类型有8中原始数据类型。
14.PHP中常用的几个预定义的全局数组变量是哪些?
有9大预定义的内置数组变量:
$_POST,$_GET,$_REQUEST,$_SESSION,$_COOKIE,$_FILES,$_SERVER,$_ENV,$GLOBALS
15.在实际开发中,常量最常用于哪些地方?
1)连接数据库的信息定义成常量,如数据库服务器的用户名、密码、数据库名、主机名;
2)将站点的部分路径定义成常量,如web绝对路径,smarty的安装路径,model、view或者
controller的文件夹路径;
3)网站的公共信息,如网站名称,网站关键词等信息。
16.函数名起名有哪些规范?
函数名区分大小写吗?
1)函数名以字母或者下划线开头;
2)函数名不区分大小写;
3)函数名不可以使用已经声明过的或者系统自建的函数名称。
17.什么是变量的能见度?
就是变量在程序中的可作用范围。
根据变量的能见度,变量分为局部变量和全局变量。
18.什么是局部变量和全局变量?
函数内是否可以直接调用全局变量?
局部变量是函数内部定义的变量,其作用域是所在的函数。
如果函数外还有一个跟局部变量名
字一样的变量,
程序会认为它们两个是完全不同的两个变量。
当退出函数的时候,其中的局部变量就同时被清
除。
全局变量是定义在所有函数以外的变量,其作用域是整个php文件,但是在用户自定义的函数内
部是无法使用的。
如果一定要在用户自定义的函数内部使用全局变量,那么就需要使用global关键字声明。
也就是说如果在函数内的变量前加上golbal来修饰,那么函数内部就可以访问到这个全局变量
,
不仅可以利用这个全局变量进行运算而且可以对这个全局变量进行重新赋值。
19.php中函数传递参数的方式有哪些?
两者有什么区别?
按值传递和按地址传递(或按引用传递)
20.什么是递归函数?
如何进行递归调用?
递归函数其实就是调用自身的函数,但是必须满足以下两个条件:
1)在每一次调用自身时,必须是更接近于最终结果;
2)必须有一个确定的递归终止条件,不会造成死循环。
举例说明:
在实际工作中往往会在遍历文件夹的时候使用。
如果有个例子是希望获取到目录windows下所有的文件,那么先遍历windows目录,如果发现其
中还有文件夹,那么就会调用自身,继续往下寻找,依次类推,
直到遍历到再也没有文件夹为止,这也就是意味着遍历出来了所有的文件。
21.include()和require()函数的用法和区别是什么?
22.说出前置++和后置++的区别?
23.什么是三目(或三元)运算符?
表达式1?
表达式2:
表达式3
27.switch语句使用的注意事项有哪些?
24.break和continue使用过程中有哪些区别?
break可以终止循环。
continue没有break强大,只能终止本次循环而进入到下一次循环中。
25.数组根据索引分为哪两种,如何区分?
数字索引数组和关联数组。
26.数组的赋值方式有哪两种?
数组的声明方式主要有两种。
1.通过array()函数声明数组;
可以通过key=>value的方式分别定义索引和值,也可以不定义数组的索引下标,只给
出数组的元素值。
2.直接为数组元素赋值,不需要调用array()函数。
例如:
$arr[0]=1;
$arr[1]=2;
27.数组如何遍历?
foreach()
28.foreach数组的时候指针是如何指向的?
list()/each()/while()循环数组的时候指针如何指向的呢
?
当foreach开始执行的时候,数组内部的指针会自动指向第一个单元。
因为foreach所操作的是
指定数组的拷贝,而不是该数组本身。
而each()一个数组后,数组指针将停留在数组中的下一个单元或者碰到数组结尾时停留在最后
一个单元。
如果要再次使用each()遍历数组,必须要使用reset().
reset()将数组的内部指针倒回到第一个单元并返回第一个数组单元的值。
29.如何计算数组长度(或者说计算数组中所有元素的个数)?
字符串怎么取长度?
count()--计算数组中的元素个数。
可以使用count(数组名)或者count(数组名,1),如果有第二个参数,并且是数字1,则表示递归
统计数组元素的个数。
如果第二个参数是数字0,则等同于只有一个参数的count()函数。
sizeof()--count()的别名
字符串:
strlen()、mb_strlen();
30.数组排序的常用函数?
数组合并的常用函数?
sort(),array_merge();
31.字符串定义的时候单引号和双引号有什么区别?
32.echo()和print()的区别是什么?
33.按照分类说说都有哪些字符串处理函数?
这些函数的作用是什么?
34.获取当前时间戳的函数主要有哪些?
35.header()函数主要的功能有哪些?
使用过程中注意什么?
36.empty()函数哪些情况下返回true?
布尔值false,
整型值0,
浮点型值0.0,
空白字符串,
字符串'0',
array()空数组,
特殊数据类型NULL,
没有任何属性的对象,
没有赋值的变量。
37.连接数据库操作的步骤是什么?
每一步的返回值是什么数据类型?
$coon=mysql_connect('localhost','root','');//返回资源类型
mysql_select_db('bbs',$coon);//布尔类型
mysq_query('setnamesutf8');//布尔类型
$qry=mysql_query('select*frombbsinfo');//资源类型
mysql_fetch_row($qry);//数组类型
38.说说mysql_affected_rows(),mysql_insert_id()的用法?
39.列举常用的文件处理函数,分别返回什么数据类型?
//对文件操作
$file="a.txt";
$fp=fopen($file,'a+');//资源类型
$fd=fread($fp,10);//字符串
$fw=fwrite($fp,'国家宁');//整型(写入的长度)
40.文件上传需要注意哪些细节?
怎么把文件保存到指定目录?
怎么避免上传文件重名问题?
1.首现要在php.ini中开启文件上传;
2.在php.ini中有一个允许上传的最大值,默认是2MB。
必要的时候可以更改;
3.上传表单一定要记住在form标签中写上enctype="multipart/form-data";
4.要注意上传文件的大小、文件类型是否符合要求,上传后存放的路径是否存在。
可以通过上传的文件名获取到文件后缀,然后使用时间戳+文件后缀的方式为文件重新命名,这
样就避免了重名。
可以自己设置上传文件的保存目录,与文件名拼凑形成一个文件路径,使用
move_uploaded_file(),就可以完成
将文件保存到指定目录。
41.$_FILES是几维数组?
第一维和第二维的索引下标分别是什么?
二维数组。
第一维是上传控件的name,二维下标分别为name/type/tmp_name/size/error.
42.什么是ajax?
ajax的原理是什么?
ajax的核心技术是什么?
ajax的优缺点是什么?
ajax是asynchronousjavascriptandxml的缩写,是javascript、xml、css、DOM等多个技术
的组合。
Ajax的工作原理是一个页面的指定位置可以加载另一个页面所有的输出内容,这样就实现了一
个静态页面也能获取到
数据库中的返回数据信息了。
所以ajax技术实现了一个静态网页在不刷新整个页面的情况下与
服务器通信,
减少了用户等待时间,同时也从而降低了网络流量,增强了客户体验的友好程度。
Ajax的优点是:
1.减轻了服务器端负担,将一部分以前由服务器负担的工作转移到客户端执行,利用客户端
闲置的资源进行处理;
2.在只局部刷新的情况下更新页面,增加了页面反应速度,使用户体验更友好。
Ajax的缺点是不利于seo推广优化,因为搜索引擎无法直接访问到ajax请求的内容。
ajax的核心技术是XMLHttpRequest,它是javascript中的一个对象。
43.使用session的步骤:
1.启动session:
使用session_start()函数来启动。
2.注册会话:
直接给$_SESSION数组添加元素即可。
3.使用会话:
判断session是否为空或者是否已经注册,如果已经存在则像普通数组使用即可。
4.删除会话:
1.可以使用unset删除单个session;
2.使用$_SESSION=array()的方式,一次注销所有的会话变量;
3.使用session_destroy()函数来彻底销毁session。
44.在实际开发中,session在哪些场合使用?
session用来存储用户登录信息和用在跨页面传值。
1)常用在用户登录成功后,将用户登录信息赋值给session;
2)用在验证码图片生成,当随机码生成后赋值给session。
45.什么是OOP?
什么是类和对象?
什么是类属性?
OOP的三大特性是什么?
OOP(objectorientedprogramming),即面向对象编程,其中两个最重要的概念就是类和对象
。
世间万物都具有自身的属性和方法,通过这些属性和方法可以区分出不同的物质。
属性和方法的集合就形成了类,类是面向对象编程的核心和基础,
通过类就将零散的用于实现某个功能的代码有效地管理起来了。
类只是具备了某些功能和属性的抽象模型,而实际应用中需要一个一个实体,也就是需要对类
进行实例化,
类在实例化之后就是对象。
OOP具有三大特点:
1.封装性:
也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或
者说只公开了一些供开发人员使用的方法。
于是开发人员只需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现
MVC分工合作,也能有效避免程序间相互依赖,
实现代码模块间松藕合。
2.继承性:
就是子类自动继承其父级类中的属性和方法,并可以可以添加新的属性和方法或者对部分属
性和方法进行重写。
继承增加了代码的可重用性。
php只支持单继承,也就是说一个子类只能有一个父类。
3.多态性:
子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。
于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后
却可以获得完全不同的结果,这种技术就是多态性。
多态性增强了软件的灵活性。
46.常用的属性的访问修饰符有哪些?
分别代表什么含义?
private,protected,public。
如果不使用这三个关键词,也可以使用var关键字。
但是var不
可以跟权限修饰词一起使用。
47.类中如何定义常量、如何类中调用常量、如何在类外调用常量。
类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。
定义常量使用关键字const.
例如:
constPI=3.1415326;
无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,
访问常量的格式都是类名加作用域操作符号(双冒号)来调用。
即:
类名:
:
类常量名;
48.什么是构造方法和析构方法?
构造方法就是在实例化一个对象的同时自动执行的成员方法,作用就是初始化对象。
php5之前,一个跟类名完全相同的方法是构造方法,php5之后魔术方法__construct()就是构造
方法。
如果类中没有定义构造方法,那么php会自动生成一个,这个自动生成的构造方法没有任何参数
,
没有任何操作。
构造方法的格式如下:
function__construct(){}
或者:
function类名(){}
构造方法可以没有参数,也可以有多个参数。
析构方法的作用和构造方法正好相反,是对象被销毁时被自动调用的,作用是释放内存。
析构方法的定义方法为:
__destruct();
因为php具有垃圾回收机制,能自动清除不再使用的对象,释放内存,一般情况下可以不手动创
建析构方法。
49.__autoload()方法的工作原理是什么?
使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行
__autoload()函数。
这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存
在这个类文件后
就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时
就提示错误。
使用自动载入的魔术函数可以不必要写很多个include或者require函数。
50.什么是抽象类和接口?
抽象类和接口有什么不同和相似的地方?
抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。
抽象类是通过关键字abstract来声明的。
抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一
个抽象方法,
抽象方法没有方法体,该方法天生就是要被子类重写的。
抽象方法的格式为:
abstractfunctionabstractMethod();
因为php中只支持单继承,如果想实现多重继承,就要使用接口。
也就是说子类可以实现多个接
口。
接口类是通过interface关键字来声明的,接口类中的成员常量和方法都是public的,方法可以
不写关键字public,
接口中的方法也是没有方法体。
接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。
在应用中选择抽象类还
是接口要看具体实现。
子类继承抽象类使用extends,子类实现接口使用implements。
51.__call的参数有几个,类型是什么,意义是什么?
魔术方法__call()的作用是当程序调用一个不存在或不可见的成员方法时,php会先调用
__call()方法,
将那个不存在的方法的方法名和参数都存储下来。
__call()包含两个参数,第一个参数是那个不存在的方法的方法名,是个字符串类型;
第二个参数是那个不存在的方法的所有参数,是个数组类型。
本人认为__call()方法的意义更多在于调试,可以定位到错误。
同时可以捕捉异常,如果某个
方法不存在,
则执行其它可替代方法。
52.字符串怎么转成整数,有几种方法?
怎么实现?
强制类型转换:
(整型)字符串变量名;
直接转换:
settype(字符串变量,整型);
intval(字符串变量);
53.页面字符出现乱码,怎么解决?
1.首先考虑当前文件是不是设置了字符集。
查看是不是meta标签中写了charset,如果是php页
面还可以看看是不是
在header()函数中指定了charset;
2.如果设置了字符集(也就是charset),那么判断当前文件保存的编码格式是否跟页面设置的
字符集保持一致,
两者必须保持统一;
3.如果涉及到从数据库提取数据,那么判断数据库查询时的字符集是否跟当前页面设置的字符
集一致,两者必须统一。
54.说出数组涉及到的常用函数。
array--声明一个数组
count--计算数组中的单元数目或对象中的属性个数
foreach--遍历数组
list--遍历数组
explode--将字符串转成数组
implode--将数组转成一个新字符串
array_merge--合并一个或多个数组
is_array--检查是否是数组
print_r--输出数组
sort--数组排序
array_keys--返回数组中所有的键名
array_values--返回数组中所有的值
key--从关联数组中取得键名
55.smarty在使用过程中需要注意哪些细节?
Smarty是基于MVC概念的一种模板引擎,它将一个页面程序分成了两部分来实现:
即视图层和控
制层,
也就是说smarty技术将用户UI与php代码分离开。
这样程序员和美工各司其职,互不干扰。
smarty运用过程中要注意以下几个问题:
1.正确配置smarty。
主要要配置smarty模板文件的路径;
2.php页面中使用assign赋值和display显示页面;
3.smarty模板文件中不允许出现php代码段,所有的注释,变量,函数都要包含在定界符内。
56.什么是MVC?
MVC的目的是什么?