php 面试题整理

4 篇文章 0 订阅
1 篇文章 0 订阅

1、php部分面试题

1.php传值跟传引用的区别

区别:传值是实参的值赋值给形参,所以形参的任何改变都不会影响到实参

传引用是在内存中开辟了一个新的空间,存放的是主调函数传进来实参的地址,所以对形参的任何操作都被处理成间接寻址,即通过内存中存放的内存地址访问主调函数的实参变量,被调函数的形参的任何改变都会影响到主调函数的实参

优缺点:传值会比较耗费时间,就比如说是一个大型的字符串或是对象,赋值得代价就比较大,传引用就是 函数内的任何操作都会影响到对实参的操作,传送大型变量时效率会比较高

2.变量的类型转换及判断变量的方法

存在的类型 整型 浮点型 字符串 数组 对象 布尔 空

类型转换

(int) intVal 强制转换为int型

(float)转换为浮点型

(string)转换为字符串

(array) 数组

(bool) 布尔(true false)

(object) 对象

unset null

判断类型

is_numeric() 检测变量是否为数字或数字字符串

is_int() 检测变量是否为整型

is_float() 检测变量是否为浮点型

is_string() 检测变量是否为字符串

is_array() 检测变量是否为数组

is_object() 检测变量是否为对象

is_null() 检测变量是否为空

is_bool() 检测变量是否为布尔

获取变量的类型

gettype()

3.php运算符优先级,一般是写出对应的运算结果

4.php中函数传参,闭包,判断输出的echo print是否为函数等

php函数传参 php的实参在传递过程中是顺序传递,不支持指定参数名传递

php闭包 子函数可以使用父函数中的局部变量,这种行为叫做闭包 关键词 (use)

在php中 匿名函数也叫作闭包函数,允许临时创建一个没有指定名称的函数, 经常被用作回调函数

echo print 是语句不是函数 print_r printf var_dump 都是函数,可以function_exists("函数名称来检测")

echo 可输出多个变量,只能打印简单类型

print 有返回值,只能输出一个变量 ,只能打印简单类型

5.PHP数组,数组函数,数组遍历 预定义数组

in_array() 判断是否在数组里边

is_array() 判断是否为数组

array_merge() 数组合并

array_push() 将一个或是多个元素压入数组栈的尾部 返回入栈的个数

array_pop() 将数组的最后一个元素弹出(出栈)

array_flip() 数组的键值对换

array_values() 获取数组的值

array_keys() 获取数组的键

array_slice() 将数组的一段取出

6.PHP面向对象,魔术方法,封装、继承、多态。设计模式,包括(单例,工厂,迭代器,装饰,命令,策略)

1)php面向对象的优缺点

优点:重用性,可扩展性,可维护性,可以设计出低耦合的系统,使系统更加灵活 便利,易于维护 三个特性:封装 继承 多态

缺点:需要实例化 性能比面向过程要低

封装:将一个类或是对象的属性或方法封装起来,需要授权才能被外部使用

php的三个访问控制符, public protected private

继承:子类可以继承一个或是多个父类的属性或方法,并且子类可以自定义属性或方法

多态:同一个对象在不同的情况下被调用(实例化),会表现出不同的形态

2)魔术方法

__construct 当一个对象被创建的时候会调用该方法

__destruct php在对象被销毁(即从内存中删除)会调用

__call 调用一个未定义(或没有权限)的方法时会调用该方法

__set 在一个未定义的属性上赋值的时候会调用到

__get 调用一个未定义的属性会调用到该方法

__isset 当在一个未定义的属性上 isset是会调用到

__unset unset一个未定义的属性时会调用到

__autoload 使用尚未被定义的类的时候会调用

__clone php的对象赋值使用的是引用赋值,使用clone克隆一个方法的时候会调用,如果对象在赋值前需要执行一些初始化操作时,可以在——clone中实现

__tostring 在一个对象转化为字符串时自动调用

__sleep 串行话的时候调用

__wakeup 反串行话的时候调用

7.php设计模式 下一文档

8.php正则表达式

邮箱:/^\w+([-_.]\w+)*@[a-]{2,5}+$/

手机:/^1[0-9]{10}&/

if(preg_match($zhenze,$str)){

echo true;

}else{echo false;}

9.

1》php异常错误处理(级别 错误日志 控制错误输出)

notice 注意 warning 警告 error 致命错误

开发环境通过配置 phpini 的 display_errors 打开这个配置 设置为 on 开启错误提示 上线后就设置为on 关闭这个错误提示 ,防止错误信息泄露敏感信息

error_reporting 报告所有的错误提示 除了&后边的错误级别

error_reporting=E_ALL & ~E_NOTICE 报告所有的错误 但是除了 E_NOTICE 这一种

 

2》php常见的错误码

200 服务器响应正常

304 该资源在上次请求后没有任何修改

400 请求报文存在语法错误

401 访问资源的权限不够

403 没有权限访问资源

404 需要访问的资源不存在

500 服务器内部错误

502 服务器暂时不可用

一般报502 的错误原因 php-CGI 进程数不够 php执行时间过长 php-CGI 进程死掉 都会出现这个错误

10.

1》php遍历整个目录 获取对应的目录及文件

function listdirFile($a){

if(is_dir($a)){

$arr = [];

$b = opendir($a);

if($b){

while($file = readdir($b) !== false){

if($file != "." || $file != ".."){

if(is_dir($file)){

$arr[$file] = listdirFile($file);

}else{

$arr[] = $file;

}

}

}

}

closedir($b);

}

return $a;

}

print_r(listdirFile("go"));

2》php获取文件后缀名的几种方式

strrchr($a,'.');

$arr = array_explode('.',$a);array_pop($arr);

substr($a,strrpos($a,"."));

pathinfo($a)[extension];

3》php引入文件的四种方式详解

9.php时间函数 日期计算函数

date("Y-m-d H:i:s N W") N代表的事星期几 大写数字1-7 W表示该时间为本周的第几天 0 为周日 第一天

date("Y-m-d H:i:s",strtotime("$date +1day")) 明天

date("Y-m-d H:i:s",strtotime("$date -1day")) 昨天

date("Y-m-d H:i:s",strtotime("$date -1month")) 上个月这天

10.php会话控制的原理是什么

1》cookie 跟 session 都是跟踪整个会话的一种手段 会话就是 用户通过浏览器跟服务器的一次通话

2》为什么要有会话控制

http协议是无状态的,服务器并不知道用户的上次操作,所以严重阻碍了交互式web应用程序的实现,这时候就需要cookie跟session的出现了,服务器可以设置和读取cookie包含的信息,借此维护用户跟服务器会话中的状态

3》cookie跟session的区别

cookie是存储于客户端 session是存储于服务器端

cookie在本地,可以随便就行修改 session存储于服务器 更安全

cookie存储于本地,可以永久有效,session存储于服务器,也可以设置永久有效,但是会比较占用服务器性能,服务器上的session会不断积累 导致内存溢出

cookie只支持ascll值,session支持所有的数据类型

cookie需要浏览器支持 session不需要

cookie支持跨域 session不支持

单个cookie的存储不超过4k,狠多浏览器都限制一个站点最多会保存20个cookie

cookie分为会话cookie跟持久cookie 会话cookie存储于内存,只要关闭浏览器,cookie会被自动销毁,持久cookie存储于硬盘中,,如果设置了过期时间,cookie会存储于硬盘中,直到过期时间到了

举个例子 使用cookie需要加密 因为支持一个账号只能同时在一个地方登陆,所以生成规则 每次登陆都会生成一个随机数,通过用户账号+随机数+指定的一个随机token生成cookie,每次登陆校验账号密码后 会返回这个cookie,

11.mvc的优缺点

优点:分工明确,通过mvc将数据库开发 业务逻辑开发及页面开发分开,方便了后期的维护,也是程序猿的分工更明确

可以为一个模型的建立同时使用多个视图,是关联的视图和控制器做到同步

重用性高 多个视图使用一个模型

视图和控制器的可接插性,允许更换控制器跟视图,可以根据需要动态的关闭某个视图或打开某个视图

缺点:降低系统性能,由于视图不能直接访问到数据库,需要透过控制器来进行访问,因此降低了性能

小型程序花费大量时间进行mvc的分割,得不偿失,而且增加了代码和工作量

12.php安全处理 过滤函数

一般如果项目开发需要使用框架的话,框架会处理这些,常用的函数 mysql_real_escape_string() addslashes() 他们都是对数据中的单引双引进行转义,也就是防止sql注入

13.php字符串处理函数

strsub 字符串截取函数 参数1 字符串 2开始的位置 3 结束的位置

strpos 查找字符在字符串中首次出现的位置

strrpos 查找字符在字符串中最后一次出现的位置

strchr ($str,".",false) 匹配该字符在字符串的位置,并返回包含该字符及后续出现的所有字符,参数为true时,返回其不包含该字符之前的所有字符串

strrchr 查找字符在字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符

strlen 计算字符串的长度

trim 去除首尾两端的空白字符

substr_count 计算该字符在字符串中出现的次数

strstr(str1,str2) 作用跟strchr是一样的

 

字符串的转义

用来将特殊意义的字符转化成他原来的意思 例如 sql中的单引号 加反斜杠转义成普通意义

函数 addslashes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值