51 在url中用get传值的时候,若中文出现乱码,应该用哪个函数对中文进行编码?
使用urlencode()对中文进行编码,使用urldecode()来解码。
52 用户在网站表单提交数据的时候,为了防止脚本攻击php端接收数据的时候,应该如何处理?
使用htmlspecialchars($_POST[‘title’])来过滤表单传参就可以避免脚本攻击。
53 连接数据库操作的步骤是什么?每一步的返回值是什么数据类型?尤其是mysql_query()返回什么数据类型?
$conn=mysql_connect("localhost","sql_name","sql_psw");//打开连接
mysql_select_db("数据库名",$conn);//连接到指定的数据库
mysql_query("set names utf8");//设置字符编码
$sql="";
$R=mysql_query($sql);//执行SQL语句返回结果集
while($v=mysql_fetch_array($R)){
echo "字段名".$v['title'];
}
mysql_query()如果里面放的是查询之类的语句,那返回的是资源,说白了就是你要查的数据结果集;如果里面放的是增删改之类的语句,那返回的是true或者false了。
54 $_FILES是几维数组?第一维和第二维的索引下标分别是什么?批量上传文件的时候需要注意什么?
二维数组。第一维是上传控件的name,二维下标分别为name/type/tmp_name/size/error.
批量上传时,那么二维下标就是数组,而并非是字符串
55 写一个递归函数完成以下功能:向函数中传一个多维数组,对数组中所有的值做判断,如果值是’number’则设置该值为0?
function recursive_array($arr) {
if(is_array($arr)) {
foreach($arr as $key=>$value) {
if(is_array($value)) {
$arr[$key] = recursive_array($value);
} else {
if($value=='number') {
$arr[$key] = '0'; }
}
}
}
return $arr;
}
56 说明是接口、抽象类二者有何相同和不同的地方?
1、接口是帮助php实现功能意义上的多继承的,用interface来声明,其方法没有方法体,使用implemens关键词来实现接口。
接口中只能包含抽象方法和类常量,不可以包含成员属性。
2、抽象类是一种不能被实例化的类,只能作父类,用abstract class来定义,抽象类和普通类可以没有区别,类中可以包含成员属性、类常量、方法。
子类得用extends来继承,而且只能是单继承。
两者相同点是都不可以被实例化,都是需要被继承才可以使用。
两者的最大区别是接口可以实现多继承,而抽象类只能是单继承。
接口中不能包含成员属性,而抽象类中可以有成员属性。
接口中的抽象方法必须是public或者无访问修饰词,接口中的抽象方法不能用abstract来修饰。
抽象类中的方法可以是普通方法,也可以是抽象方法,如果是抽象方法,一定需要使用abstract来修饰。
57 $this,self, parent分别代表什么?哪些场合下使用
$this代表的是当前对象
self代表的是当前的类
parent代表的是当前类的父类
使用场合:
$this只能使用在当前类中,通过$this->可以调用当前类中的属性和方法;
self只能在当前类中使用,通过作用域操作符::访问当前类中的类常量、当前类中的静态属性、当前类中的方法;
parent只能使用在有父类的当前类中,通过作用域操作符::访问父类中的类常量、父类中的静态属性、父类中的方法。
58 作用域操作符在那些场合下使用?
作用于操作符的使用场合
a) 本类中: i. self::类常量 ii. self::静态属性 iii. self::方法() parent::方法()
b) 子类中: i. parent::类常量 ii. parent::静态属性(public或者protected) iii. parent::方法()(public或者protected)
c) 类外: i. 类名::类常量 ii. 类名::静态属性(public) iii. 类名::静态方法(public)
59 Class关键词前可以有哪些修饰词
- Final修饰,表示该类是最终的,无法继承;
- Abstract修饰,表示该类是抽象类
60 访问权限修饰符有哪几种,对比解释
1)public 表示公共的,在本类中和子类中以及类外,可以对其调用;
2)protected表示受保护的,可以在本类中和子类中调用;
3)private表示私有的,只能在本类中调用;
4)var,效果等同于public
61 常用魔术方法的触发时机?
1)__autoload() :当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后,就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。使用自动载入的魔术函数可以不必要写很多个include或者require函数。
2)__construct() :构造方法是实例化对象的时候自动执行的方法,作用就是初始化对象。该方法可以没有参数,也可以有多个参数。如果有参数,那么new这个对象的时候要记得写上相应的参数。在php5以前,没有魔术构造方法,普通构造方法是一个跟类名同名的方法来实现构造的。如果一个类中既写了魔术构造方法,又定义了普通构造方法。那么php5以上版本中,魔术方法起作用,普通构造方法不起作用。反之,在php5以前版本中,不认识魔术构造方法,只是把该方法当做普通的方法。
3)__destruct() :析构方法作用和构造方法正好相反,是对象被销毁时被自动调用的,作用是释放内存。析构方法没有参数。
4)__call() :当程序调用一个不存在或不可见的成员方法时,自动触发执行__call()。它有两个参数,分别是未访问到的方法名称和方法的参数。而第二个参数是数组类型。
5)__get() :当程序调用一个未定义或不可见的成员属性时,自动触发执行__get()。它有一个参数,表示要调用的属性的名称。 6)__set():当程序试图写入一个不存在或不可见的成员属性时,PHP就会自动执行__set()。它包含两个参数,分别表示属性名称和属性值。
7)__tostring() :当程序使用echo或print输出对象时,会自动调用该方法。目的是希望通过该方法将对象转化为字符串,再输出。__tostring() 无参数,但是该方法必须有返回值。
8)__clone() :当程序clone一个对象的时候,能触发__clone()方法,程序希望通过这个魔术方法实现:不仅仅单纯地克隆对象,还需要克隆出来的对象拥有原来对象的所有属性和方法。
62 OOP的三大特性是什么?
- 封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现MVC分工合作,也能有效避免程序间相互依赖,实现代码模块间松藕合。
- 继承性:就是子类自动继承其父级类中的属性和方法,并可以可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。php只支持单继承,也就是说一个子类只能有一个父类。
- 多态性:子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。多态性增强了软件的灵活性。
63 如果一个类既要继承一个父类,又要实现多个接口,该如何写?
书写格式例如: class MaleHuman extends Human implements Animal,Life { ... }
64 final 关键字的应用应注意的问题?
使用final关键字定义的类,禁止继承。 使用final关键字定义的方法,禁止重写。
65 如果一个类是抽象类,而类中的方法都是非抽象的方法,会报错吗?
不会,如果一个类是抽象类,其中可以没有抽象方法,但是一个类中有个方法是抽象方法,那么这个类一定是一个抽象类
65 说说static关键字的使用场合?static能用在class前吗?
static可以在属性和方法前面使用,调用static属性或者方法时,只要将类载入就可用,不用实例化,static不能用在class的前面。
66 java语言中方法重写和重载分别代表什么意思?准确说php支持方法的重载吗?很多参考书中提到的php重载实际上该如何正确理解?
php不支持方法的重载,很多书里提到的PHP‘重载’应该是‘重写’