php⾯试题⽬100及最佳答案,2020最新PHP⾯试100题(⼀)⼀、什么是⾯向对象?主要特征是什么?
⾯向对象是程序的⼀种设计⽅式,它利于提⾼程序的重⽤性,使程序结构更加清晰。主要特征:封装、继承、多态。
⼆、SESSION 与 COOKIE的区别是什么,请从协议,产⽣的原因与作⽤说明?
http⽆状态协议,不能区分⽤户是否是从同⼀个⽹站上来的,同⼀个⽤户请求不同的页⾯不能看做是同⼀个⽤户。
SESSION存储在服务器端,COOKIE保存在客户端。Session⽐较安全,cookie⽤某些⼿段可以修改,不安全。Session依赖于cookie进⾏传递。
禁⽤cookie后,session不能正常使⽤。Session的缺点:保存在服务器端,每次读取都从服务器进⾏读取,对服务器有资源消耗。Session保存在服务器端的⽂件或数据库中,默认保存在⽂件中,⽂件路径由php配置⽂件的session.save_path指定。Session⽂件是公有的。
三、HTTP 状态中302、403、 500代码含义?
⼀⼆三四五原则: ⼀. 消息系列 ⼆ 成功系列 三. 重定向系列 四. 请求错误系列 五. 服务器端错误系列
302:临时转移成功,请求的内容已转移到新位置 403:禁⽌访问 500:服务器内部错误 401代表未授权。
四、Linux 下建⽴压缩包,解压缩包的命令
<:
打包: tar czf
解压: tar xzf
Bz2:
打包: bzip2 [-k] ⽂件
解压: bunzip2 [-k] ⽂件
Gzip(只对⽂件,不保留原⽂件)
打包:
解压:
Zip: -r 对⽬录
打包: zip file1.
解压: unzip file1.zip
五、请写出数据类型(int char varchar datetime text)的意思;请问 varchar 和 char有什么区别?
Int 整数 char 定长字符 Varchar 变长字符 Datetime ⽇期时间型 Text ⽂本型 Varchar 与char的区别 char是固定长度的字符类型,分配多少空间,就占⽤多长空间。 Varchar是可变长度的字符类型,内容有多⼤就占⽤多⼤的空间,能有效节省空间。 由于varchar类型是可变的,所以在数据长度改变的时,服务器要进⾏额外的操作,所以效率⽐char类型低。
六、MyISAM 和 InnoDB 的基本区别?索引结构如何实现?
MyISAM类型不⽀持事务,表锁,易产⽣碎⽚,要经常优化,读写速度较快,⽽InnoDB类型⽀持事务,⾏锁,有崩溃恢复能⼒。读写速度⽐MyISAM慢。
创建索引:alert table tablename add index (字段名)
七、不使⽤cookie向客户端发送⼀个cookie.
理解:session_start()开启时,⽣成⼀个常量 SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在URL后加⼀个SID参数来传递SESSIONID的值,从⽽使客户端页⾯可以使⽤SESSION⾥⾯的值。 当客户端开启COOKIE和服务器端开启SESSION时。 浏览器第⼀次请求,服务器会向浏览器端发送⼀个COOKIE⾥⾯存储SESSIONID. 当浏览器第⼆次请求时,会把已存在
⼋、isset() 和 empty() 区别
Isset判断变量是否存在,可以传⼊多个变量,若其中⼀个变量不存在则返回假,empty判断变量是否为空为假,只可传⼀个变量,如果为空为假则返回真。
九、如何在页⾯之间传递变量(⾄少两种⽅式) ?
GET,POST,COOKIE,SESSION,隐藏表单
⼗、写出匹配URL的正则表达式
‘/^(https?|ftps?):\/\/(www)\.([^\.\/]+)\.(com|cn|org)(\/[\w-\.\/\?\%\&\=]*)?/i’
⼗⼀、请写出常见的排序算法,并⽤PHP实现冒泡排序,将数组$a = array()按照从⼩到⼤的⽅式进⾏排序。
常见的排序算法: 冒泡排序法、快速排序法、简单选择排序法、堆排序法、直接插⼊排序法、希尔排序法、合并排序法。
冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进⾏多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进⾏交换。这样,关键字较⼩的记录将逐渐从后⾯向前⾯移动,就象⽓泡在⽔中向上浮⼀样,所以该算法也称为⽓泡排序法。
// 冒泡排序法
Function mysort($arr){
For($i=0; $i
For($j=0; $j
If($arr[$j] > $arr[$j+1]){
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
}
}
}
Return $arr;
}
$arr=array(3,2,1);
print_r(mysort($arr));
⼗⼆、请说明 PHP 中传值与传引⽤的区别。什么时候传值什么时候传引⽤?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引⽤传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于⼤型的字符串和对象来说,这将会是⼀个代价很⼤的操作。按引⽤传递则不需要复制值,对于性能提⾼很有好处。
设置 PHP 的报错级别并返回当前级别。
请⽤正则表达式(Regular Expression)写⼀个函数验证电⼦邮件的格式是否正确。
if(isset($_POST['action']) && $_POST['action']==’submitted’){
$email=$_POST['email'];
if(!preg_match(“/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+){1,3}$/”,$email)){
echo “电⼦邮件检测失败”;
}else{
echo “电⼦邮件检测成功”;
}
}
⼗四、使⽤PHP描述快速排序算法,对象可以是⼀个数组?
原理:快速排序使⽤分治策略来把待排序数据序列分为两个⼦序列,具体步骤为:
(1)从数列中挑出⼀个元素,称该元素为“基准”。
(2)扫描⼀遍数列,将所有⽐“基准”⼩的元素排在基准前⾯,所有⽐“基准”⼤的元素排在基准后⾯。
(3)通过递归,将各⼦序列划分为更⼩的序列,直到把⼩于基准值元素的⼦数列和⼤于基准值元素的⼦数列排序。//快速排序(数组排序)
function QuickSort($arr){
$num = count($arr);
$l=$r=0;
for($i=1;$i
if($arr[$i] < $arr[0]){
$left[] = $arr[$i];
getsavefilename$l++;
}else{
$right[] = $arr[$i];
$r++;
}
}
if($l > 1){
$left = QuickSort($left);
}
$new_arr = $left;
$new_arr[] = $arr[0];
$right = QuickSort($right);
}
for($i=0;$i
$new_arr[] = $right[$i];
}
return $new_arr;
}
⼗五、使⽤PHP描述顺序查和⼆分查(也叫做折半查)算法,顺序查必须考虑效率,对象可以是⼀个有序数组//⼆分查(数组⾥查某个元素)
function bin_sch($array, $low, $high, $k){
if ($low <= $high){
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
return $mid;
}elseif ($k < $array[$mid]){
return bin_sch($array, $low, $mid-1, $k);
}else{
return bin_sch($array, $mid+1, $high, $k);
}
}
return -1;
}
//顺序查(数组⾥查某个元素)
function seq_sch($array, $n, $k){
$array[$n] = $k;
for($i=0; $i
if($array[$i]==$k){
break;
}
}
if ($i
return $i;
}else{
}
}
⼗六、写⼀个⼆维数组排序算法函数,能够具有通⽤性,可以调⽤php内置函数(array_multisort()) //⼆维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序function array_sort($arr, $keys, $order=0) {
if (!is_array($arr)) {
return false;
}
$keysvalue = array();
foreach($arr as $key => $val) {
$keysvalue[$key] = $val[$keys];
}
if($order == 0){
asort($keysvalue);
}else {
arsort($keysvalue);
}
reset($keysvalue);
foreach($keysvalue as $key => $vals) {
$keysort[$key] = $key;
}
$new_array = array();
foreach($keysort as $key => $val) {
$new_array[$key] = $arr[$val];
}
return $new_array;
}
⼗七、请以空格作为间隔,拆分字符串’Apple Orange Banana Strawberry’,组成数组$fruit,数组中所有元素都⽤⼩写字母,并按照字母先后次序排序
class sort {
private $str;
public function __construct($str) {
$this->str=strtolower($str);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。