整理的一些PHP面试题目
1.strlen()和mb_strlen()的作用分别是什么?
strlen()和mb_strlen()的作用都是来获取字符串的长度,其中strlen()只针对单字节编码字符,也就是计算字符串的总字节数,如果是多字节编码,如gbk和utf8,使用strlen()获得的不是字符总数而是总字节数,可以使用mb_strlen来获取其字符的个数,使用mb_string要注意两点,一是要开启mbstring扩展,而是要指定字符集。
应用如下例
2.include和require都能把一个文件包含到当前文件中,两者有什么区别?include和include_once区别呢?
include函数会将指定的文件读入并且执行里面的程序;
require函数会将目标文件的内容读入,并且把自己本身代换成这些读入的内容;
include与require除了在处理引入文件的方式不同外,最大的区别就是:include在引入不存文件时产生一个警告且脚本还会继续执行,而require则会导致一个致命性错误且脚本停止执行。include与require除了在处理引入文件的方式不同外,最大的区别就是:include在引入不存文件时产生一个警告且脚本还会继续执行,而require则会导致一个致命性错误且脚本停止执行。
include_once (require_once)语句在脚本执行期间包含并运行指定文件。此行为和 include (require)语句类似,区别是如果该文件中的代码已经被包含了,则不会再次包含,只会包含一次。include_once(require_once)需要查询一遍已加载的文件列表, 确认是否存在, 然后再加载。include_once 语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次;
3.POST和GET有什么区别?
1. GET是从服务器上获取数据,POST是向服务器传送数据。
2. GET是通过发送HTTP协议通过URl参数传递进行接收,而POST是实体数据,通过表单提交
3. GET传送的数据量较小,不能大于2KB。POST传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
4. GET安全性非常低,POST安全性较高。
4.foo()和@foo()之间有什么区别?
foo()会执行这个函数,任何解释错误,语法错误,执行错误都会在页面上显示出来。
@foo()在执行这个函数时,会隐藏上述的错误信息。
很多应用程序都会使用@mysql_connect()和@mysql_query来隐藏mysql的错误信息,这样不好,错误不应该被隐藏,应该妥善处理。
5.PHP中关于当前脚本,$_SERVER的有关信息。
客户端IP:$_SERVER["REMOTE_ADDR"]
服务器端IP:$_SERVER["SERVER_ADDR"]
获取当前脚本的执行路径:$_SERVER["SCRIPT_FILENAME"]或者__FILE__
当前脚本的名称:$_SERVER["PHP_SELF"]或者$_SERVER["SERIPT_NAME"]
链接到前一页的URL地址:$_SERVER["HTTP_REFERER"]
6.sort(),asort(),ksort(),arsort(),rsort()各有什么区别。
sort()对数组进行排序,当函数结束时数组单元将被从最低到最高重新安排。
rsort()对数组进行逆向排序。
asort()对数组进行排序并保持索引关系。
arsort()对数组进行逆向排序并保持索引关系。
ksort()对数组进行按照键名排序,保留键名到数据的关联,主要用于关联数组。
7.什么是可变变量?以下程序的输入值是什么?
获取一个普通变量的值作为这个可变变量的变量名。
以上程序输出:hotdogok
8.常量如何定义,如何检测一个常量是否被定义?
定义常量:define()
检测常量是否定义:defined(),例如
define("TEST","hello world");
if(defined("TEST")){
echo TEST;
}
9.执行程序段<?php echo 8%(-2) ?>,输出结果是:
%为取模运算,以上程序将输出0
$a%$b,其结果的正负取决于$a的符号。
echo ((-8)%3); //将输出-2
echo (8%(-3)); //将输出2
10.echo count("abc")将会输出什么;
count()函数计算数组中的单元数目或者对象中的属性个数,通常是一个array(),对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法count(),此方法返回count()函数的返回值。
如果参数不是数组型或者实现了countable接口的对象,将返回 1,只有一个例外,如果参数是NULL,则结果是 0。
11.PHP中单引号和双引号有什么区别?哪个速度更快?
单引号更快
单引号内的数据不会被解析(任何变量和特殊转义字符),所以速度更快,而双引号内的数据会被解析,如变量($var)值会代入字符串中,特殊转义字符也会被解析成特定的单个字。
单引号例如:
$name='hello';
echo 'the $name';
会输出 the $name
如果是双引号
$name='hello'
echo "the $name"
会输出 the hello
12.简述GBK,GBK2312,BIG5,GB18030
GB2312支持的汉字较少,GBK是相比GB2312汉字更为丰富,包括全部的中日韩汉字,GB18030相比GBK增加了一些少数民族汉字汉字库更为多样,常人很少用,一般简体中文使用GBK而繁体中文使用BIG5
13.简述empty()函数的用法
bool empty($var) 如果 var
是非空或非零的值,则 empty() 返回 FALSE
。换句话说,""、0、"0"、NULL
、FALSE
、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var
为空,则返回 TRUE
。
14.is_null()函数的用法?
检测变量是否为NULL,如果是null,则返回TRUE,否则返回FALSE。通常变量被认识是NULL有三种情况1.被赋值为NULL2.尚未被赋值3.被unset()。
15.接口与抽象类的区别是什么?
抽象类是不能被实例化的类,只能作为其他类的父类来使用,抽象类是通过关键字abstract来声明。
抽象类与普通类类似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少包含一个抽象方法。
抽象方法没有方法体,该方法天生就是要被子类重写的。
抽象方法的格式为:abstr function abstractMethod()
接口是通过interface关键字来声明,接口中的成员常量和方法都是public的,方法可以不写关键字public。
接口中的方法也是没有方法体的,接口中的方法也是天生要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承,在应用中选择抽象类还是接口要看具体实现。
子类继承抽象类使用extends,子类实现接口使用implements。