算法题

1、遍历出一个文件夹下的所有文件和文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function my_scandir($dir){
//定义文件输出的变量
$files = [];
if($handle = opendir($dir)){ //是否有权限打开
while(( $file = readdir($handle)) !== false ){
if(is_dir($dir.'/'.file)){
$files[$file] = my_scandir($dir.'/'.file)
}else{
$files[] = $file;
}
}
closedir($dir);
return $diles;
}
}

2、写一个函数是不是回文字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function ishuiwen($string){

//将字符串转化成数组
$stra = str_split($string);
//逆序输出数组array_reverse
$strb=array_reverse($stra);
//判断两数组是否相等,相等为回文
for($i=0;$i<count($stra);$i++){
if($stra[$i]!=$strb[$i]){
return 1;
break;
}
}
return 2;
}

$string="abc12363211cba";
$res = ishuiwen($string);
if($res==2){
echo "YES";
}else{
echo "NO!";
}

概念题

抽象类和接口的概念以及区别?

抽象类:它是一种特殊的,不能被实例化的类,只能作为其他类的父类使用。使用abstract关键字声明。

它是一种特殊的抽象类,也是一个特殊的类,使用interface声明。

抽象方法:在方法前面有abstract,而且方法没有方法体,连“{ }”也不能有

(1)抽象类的操作通过继承关键字extends实现,而接口的使用是通过implements关键字来实现。

(2)抽象类中有数据成员,可以实现数据的封装,但是接口没有数据成员。

(3)抽象类中可以有构造方法,但是接口没有构造方法。

(4)抽象类的方法可以通过private、protected、public关键字修饰(抽象方法不能是private),而接口中的方法只能使用public关键字修饰。

(5)一个类只能继承于一个抽象类,而一个类可以同时实现多个接口。

(6)抽象类中可以有成员方法的实现代码,而接口中不可以有成员方法的实现代码

__autoload()方法的工作原理是什么?

使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。

当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。

这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后

就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。

使用自动载入的魔术函数可以不必要写很多个include或者require函数。