PHP常见面试题(一)
2016-11-20 19:13
246 查看
1. PHP的基础知识点
PHP中类的继承属于单继承,一个子类只能继承一个父类。可见性为public protected的属性和方法可以被继承。继承的方法或属性可以被重写,可见性越来越大。
PHP中的变量名区分大小写,但类名、函数名不区分大小写。
2. error_reporting()函数的作用
error_reporting()函数的作用是临时设置脚本执行过程中的错误报告级别。error_reporting(E_ALL ^ E_NOTICE); // 除了E_NOTICE之外,报告所有的错误
使用 error_reporting(0) 或者在函数前面加 @,可以抑制错误信息输出,以防止错误消息泄露敏感信息。
3. HTTP状态码
在HTTP1.1中,状态码401的含义是未经授权;如果想返回“找不到文件”,可使用header函数,语句为:header(“HTTP/1.1 404 Not Found”);4. require和include的区别
include 引入文件,如果引入的文件发生错误,会产生一条警告信息,后续的代码会继续执行。require引入文件,会更加严谨一些,如果引入的文件发生错误,会抛出一个致命的错误,并中断后续代码的执行。因此我们常常用require引入一个非常重要的文件。
5. 存储引擎 MyISAM 和 InnoDB的区别
MyISAM适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好,MyISAM不支持事务、外键和行锁。MyISAM的每个数据表包括三个文件,分别是表的结构、表的索引和表的数据,表的索引和表的数据是分开存储的。InnoDB在写操作比较多的时候会更优秀,InnoDB支持事务、外键和行锁。InnoDB的数据表包括两个文件,表的索引和数据存储在同一个文件中,默认是共享表空间,即所有数据表的索引和数据存储在同一个文件中,但也可以设置为独立表空间(若要对数据表采用分区技术,必须设置为独立表空间)。
6. 如何得到当前PHP脚本的路径(包括所有参数)?
echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
7. 在php中不使用第三个变量,如何实现交换两个变量的值?
<?php $a = 1; $b = 2; list($b, $a) = array($a, $b); echo $a.$b;
或
<?php $a = "hello"; $b = "good"; $a = $a.$b; $b = substr($a, 0, strlen($a)-strlen($b)); $a = substr($a, strlen($b)); echo $a.$b
8. 自定义一个PHP函数,要求用冒泡排序对数组进行升序排列
<?php function bubbleSort($arr){ $length=count($arr); if($length==0) return false; for($i=0;$i<$length-1;$i++){ for($j=0;$j<$length-$i-1;$j++){ if($arr[$j]>=$arr[$j+1]){ $temp=$arr[$j+1]; $arr[$j+1]=$arr[$j]; $arr[$j]=$temp; } } } return $arr; }
9. 如何将a.txt文件里的内容追加到b.txt文件中?
file_put_contents('b.txt', file_get_contents('a.txt'), FILE_APPEND);
10. 表单提交方式中的get和post有什么区别?
get是表单的默认提交方式,会把数据附加到表单的action属性所指向的URL中,在URL中可见,安全性较差;post会把数据放到http的包体中,用户一般看不到,安全性较好。get传递的数据量受URL长度的限制,故数据量较小,一般只有几kb;而post传递的数据量受php.ini的限制,数据量较大,如果有文件上传的话,表单的提交方式一定要用post。
get传递的数据会被缓存下来,可能有安全性问题,而post方式没有这个问题。
get传递的数据通过$_GET[]获取,post传递的数据通过$_POST[]获取。
11. php中三种处理mysql数据库的扩展库(mysql、mysqli、pdo)的区别?
mysql: 只可以通过面向过程的方式处理mysql数据库mysqli: 既支持面向对象的方式处理mysql数据库,也保留了面向过程的处理方式,同时增加了预编译和参数绑定的功能。
pdo: 支持面向对象的方式处理各种数据库类型(如:mysql、oracle、db2等),也就是说pdo是可以跨数据库类型的,推荐使用pdo。
12. 请写出验证邮箱的正则表达式
$pattern = "/^[^_][\w\.-]+@[\w]+(\.\w+)+$/i"; 或 $pattern = "/^[a-zA-Z0-9_\.-]{2,}@[a-zA-Z0-9_\-]{2,}(\.[a-zA-Z0-9]{2,})+$/";
13. 请用递归函数遍历目录,返回一个数组
<?php function getdir($path){ if(is_dir($path)){ $arr=scandir($path); foreach($arr as $v){ if($v!='.' && $v!='..'){ $newPath=$path."/".$v; $newArr[]=$newPath; if(is_dir($newPath)){ $newArr2=getdir($newPath); if(is_array($newArr2)){ $newArr=array_merge($newArr,$newArr2); } } } } } return $newArr; } $re=getdir("file"); echo "<pre>"; var_dump($re); echo "</pre>";
14. 自定义一个删除多级空目录的函数
<?php function deleteDir($path){ $arr=explode("/",$path); //array('a','b','c'); $len=count($arr); for($i=0;$i<$len;$i++){ $nPath=implode("/",$arr); if(count(scandir($nPath))==2){ $re=rmdir($nPath); unset($arr[$len-$i-1]); }else{ return false; } } return $re; }
15. 单引号和双引号的区别
双引号可以解析变量,单引号不能解析变量双引号和单引号可以互相嵌套
双引号当中包含单引号,单引号当中包含变量,变量会被解析,单引号会被原样输出
双引号可以解析所有的转义字符,单引号只能解析\和’本身的转义
双引号的效率比单引号要低
16. 七种转为布尔类型的false的情况
1. 整型 0 2. 浮点类型 0.0 3. 字符串 "","0" 4. 布尔类型 false 5. 空数组 array() 6. null
17. null的三种情况
1. 直接赋值为null,如:$a=null 2. 未定义的变量 3. unset销毁的变量,如:unset($a)
18. empty()和isset()的区别
empty判断变量的值是否为空;isset判断变量的值是否被设置。区别:
empty在false的七种情况下返回true,其余返回false。
isset在null的三种情况下返回false,其余情况返回true。
相关文章推荐
- 【转载】php面试题常见知识点总结
- 三年以上php开发经验常见面试题
- PHP中级程序员常见面试题
- PHP常见面试题和答案
- php常见面试题
- 找工作中常见的PHP面试题及答案(2)
- php常见面试题
- 【总结】PHP常见面试题汇总(四)。。。
- 【总结】PHP常见面试题汇总(三)
- PHP中级程序员常见面试题
- 三年以上php开发经验常见面试题
- 【总结】PHP常见面试题汇总(二)。。。
- 【ci框架】PHP常见面试题汇总。。。
- PHP常见面试题
- 33道php常见面试题及答案
- 最常见的php面试题
- 【总结】PHP常见面试题汇总(一)。。。
- php面试题常见知识点总结
- 【总结】PHP常见面试题汇总(一)
- PHP 10个常见面试题及答案