最新2020年PHP面试题高频考点

1.php是什么,原理及运行机制

php(HyPertext Preprocessor),超文本处理器,它是一种跨平台、开源、免费的脚本语言。语法吸取了C语言、JaVa、Perl的特点,主要适用于在web开发领域,以学习简单、开发快、性能稳定而受到欢迎。

Php由SAPI、Main、Zend、Ext四部分构成,SAPI主要PHP的应用接口层,用于不同环境的适配;Main主要输入/输出web通信、php框架的初始化操作等;Zend是php的核心,PHP的解释和编译都由它来完成;Ext是Php的扩展目录。

如果将 PHP 看作一辆汽车,那么车的框架就是 PHP 本身,Zend 是车的引擎(发动机),Ext 下面的各种组件就是车的轮子,SaPI 可以看做是公路,车可以跑在不同类型的公路上,而一次 PHP 程序的执行就是汽车真正跑在公路上。
要想让汽车跑得快,性能优异的引擎+合适的车轮+正确的跑道都是缺一不可的。

PHP的整个生命周期可以分成五阶段:模块初始化阶段、请求初始化阶段、脚本执行阶段、请求关闭阶段和模块关闭阶段。

  1. 模块初始化阶段主要进行PHP框架、Zend引擎初始化操作;
  2. 请求初始化阶段是每个请求请求处理前都需要经历的阶段,对于fpm而言,是每个worker进程在接受一个请求且获取、解析完请求数据后的阶段;
  3. 脚本执行阶段包括PHP代码的编译和执行两个核心阶段,这也是Zend引擎最重要的功能;
  4. 请求关闭阶段该阶段将flush输出内容,发送http应答的header头、清理局部变量、关闭编译器、关闭执行器等,与请求初始化阶段操作是相反的;
  5. 模块关闭阶段在SaPI关闭时执行,主要进行资源清理和PHP各模块的关闭操作。

 

2.PHP的数据类型

PHP有八大数据类型,四个标量类型(布尔型、字符串型、整型、浮点型)两个复合类型(数组型、对象型)、两个特殊类型(资源型和null)。

 

3.字符串函数有哪些

strlen计算字符串长度

strrev 字符串反转

str_pop 用以将字符串添加到固定长度

str_replace 字符串替换

str_repeat 重复字符串一定次数

ucfirst 字符串首字母大写  

lcfirst首字母小写

ucwords 字符串每个词首字母大写

strtolower 字符串转成小写

strtoupper 字符串转换成大写

strstr 查找字符串第一次出现的位置

substr 返回字符串的一部分

explode 以固定字符拆分字符串为数组

implode  将数组元素组合成字符串

trim  移除字符串左右两侧空白或其他字符

htmlspecialchars  把预定义的字符串转换成html实体

 

4.常用的数组函数有哪些

array 创建数组

count 计算数组元素数目

sizeof  count别名

array_replace 使用后面数组的值替换前面数组的值

array_shuffle 随机打乱数组

array_colum 返回数组的某一列

array_merge 数组合并

array_pop 删除数组中最后一个值(出栈)

array_push 将一个或多个元素插入到数组的尾部(入栈)

array_shift 删除数组中第一个键值

array_unshift 在数组的头部插入一个或多个元素

array_unique 删除数组中重复的值

array_sum 返回数组中值得和

sort 对数组进行排序

arsort 对数组按键值进行升序排序

asort 对数组安键值进行降序排序

 

5.什么是面向对象

面向对象是一种编程思想,对象是一个信息及对信息处理的描述所组成的整体,是对现实世界的抽象。

它的三大特征封装、继承、多态。封装是将现实世界中存在的某个客体的属性和行为捆绑在一起,并放在一个逻辑单元内;继承是一种联结的层次模型,并允许和鼓励重用。对象的新类可以从现有的类中派生,这个过程叫类的继承。新类叫做派生类又叫子类,原有类叫做基类又叫父类。子类可以从父类那里继承方法和属性,也可以修改或增加新的方法。一个子类只能继承一个父类;多态是指不同类的对象对同一消息可以产生不同的结果。

一个类可以有自己的常量、变量、方法。

类的定义用关键词class进行开头,继承用extends关键词,实例化用关键词new。

面向对象的有点是多人合作方便,减少代码冗余,灵活度高;代码可重用;可扩展性强。

 

6.魔术方法有哪些

__get() 读取不可访问的属性值时,该函数被自动调用

__set() 再给不可访问属性进行赋值时,该方法被调用

__isset() 当对不可访问属性调用isset()或empty()时,该方法被调用

__unset() 当对不可访问属性调用unset() 时,该方法被调用

__call() 在对象中调用一个不可访问的方法时,该方法被调用

__construct() 当构建新对象时被调用,常用于初始化。

__destruct()  当对象的所有引用被销毁时被调用,作用是释放内存

__toString()  用于一个类被当成字符串时怎么样回应

__invoke() 当尝试以调用函数的方法调用一个对象时,该方法被调用

 

7.魔术常量有哪些

__DIR__ 文件所在目录

__FILE__ 文件的完整路径和文件名

__LINE__ 文件中的行号

__CLASS__ 返回被定义时类的名称(区分大小写)

__FUNCTION__ 返回被定义时函数的名称(区分大小写)

__METHOD__ 返回被定义时方法的名称(区分大小写)

__NAMESPACE__ 返回当前命名空间(区分大小写)

 

8.抽象类和接口的区别与联系有哪些

区别:

  1. 接口的使用通过implements,对抽象类的使用通过关键字extends。
  2. 接口中不可以声明成员属性,但可以声明类常量。抽象类中可以使用各种成员属性,实现数据的封装。
  3. 接口没有构造函数,抽象类中可以有。
  4. 接口中默认的方法时public来修饰,抽象类中可以用修饰符来修饰。
  5. 一个类可以继承多个接口,但只能继承一个抽象类。
  6. 抽象类用abstrant关键字在类前声明,且有class声明为类。接口是interface来声明。

联系:

  1. 均可继承;
  2. 都是通过类来实现相关细节;

 

9.this、self、parent的区别

this 用于类的内部被调用时

self 用于访问静态方法和静态变量

Parent 用来访问父类的方法

 

10.smarty是什么,有什么作用

Smarty是用php写出来的一种模板引擎,是目前业界最著名的模板引擎之一。

它实现了php逻辑代码和html外在的显示相分离,提供了一种易于管理和使用的方法。

其最显著的地方是可以把模板缓存起来。一般模板来说都是一个静态页面,然后把动态部分用分隔符分隔开,然后再在php里打开这个模板文件,把分隔符替换掉,然后输出出来。而smarty设定了缓存参数之后,第一次运行时把模板缓存起来,在php替换时把读取出来的php和html重新生成一个临时的php文件,这样免去了每次打开重读html了,如果修改了模板,只要重新刷新下即可。

有速度快,编译型,缓存技术,插件机制,强大的表现逻辑几大特点。

 

11.获取服务器的IP地址和客户端的IP地址

$_SERVER[‘SERVER_ADDR’] 获取服务器的ip地址

$_SERVER[‘REMOTE_ADDR’] 获取客户端的ip地址

 

12.打印前一天的时间,格式为‘2020-3-4 16:56:08’

echo date(‘Y-m-d H:i:s’,strtotime(‘-1 day’,time()));

 

13.echo、print、print_r、var_dump的区别

echo可以输出多个值,中间用,分隔开。它是一种语法结构,不是真正的函数,没有返回值。只能输出字符串、整型、浮点型的数据,不能打印资源型和复合型数据。

Print 只能打印简单的数据类型如整型、字符串。

Print_r 可以打印复杂的数据类型如数组、对象。

Var_dump 可以打印出变量类型、值和长度。

 

14.单引号和双引号的区别

  1. 单引号内的变量不会被解析,双引号里的变量会被解析。
  2. 双引号可以解析转义字符,单引号不解析专一字符。
  3. 单引号比双引号执行效率高。

 

15.php中传值和传引用的区别,什么时候传值什么时候传引用?

变量默认的传值方式是按值传递,一个变量值改变不会影响另一个变量;

传引用时,函数范围内对值得任何改变在函数外部也能反映出来。

按值传递时,php需要复制值,特别是大型的字符串和对象,这将是一个很大的代价,而按引用传递就不会。

 

16.谈谈你对MVC的认识

MVC是指M(Model)模型层、V(View)视图层、C(Controller)控制器层的英文缩写。

Model模型层是应用程序中处理数据逻辑的部分,通常模型对象负责在数据库中存取数据;

View 视图层是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的;

Controller 控制器层是应用程序中处理用户交互的部分,通常控制器负责从视图层获取数据,控制用户输入,并向模型发送数据。

核心思想是视图和用户交互通过事件导致控制器改变,控制器改变导致模型改变或者控制器同时改变两者。模型改变导致视图改变,或者视图改变潜在的从模型里面获取参数来改变自己。

MVC分层有助于管理复杂的应用程序,简化了分组开发,不同的开发成员可以同时开发视图、控制器、业务逻辑。

 

17.cookie和session的区别

Cookie产生原因:在网站开发中,http请求是无状态的,用户第一次和服务器连接并登录成功后,第二次连接仍无法判断当前请求是那个用户的。Cookie就是为了解决这一问题,当用户第一次请求登录成功后,服务器会返回一些数据,然后浏览器存储到本地,该用户再次请求时,就会自动把上次请求存储的cookie自动携带给服务器了,服务器通过这些数据就可以判断当前是哪个用户了。

不同点:

1)存储位置不同:cookie存储在客户端,session存储在服务器端;

2)安全程度不同:cookie不是很安全,可以通过分析进行修改;

3)性能程度不同:session在一定时间内存储在服务器上,当访问量增加时,会比较影响服务器性能;

5)存储大小不同:单个cookie大小一般不超过4KB,而浏览器一般限制一个站点最多保存20个cookie。Seesion存储在服务器上,浏览器对其没有限制。

 

18.Include和require的区别

  1. 加载失败处理方式不同:include在加载失败后会产生一个警告,且脚本仍正常执行;require则会产生一致命错误,停止脚本执行。
  2. Include是有条件包含函数,require是无条件包含函数。
  3. 文件引用方式不同:include有返回值,require没有。
  4. 使用方法不同:require一般放在php程序的最前面,程序执行时就会引入文件,使其变成php程序页面的一部分;include一般放在流程控制部分,当读到include文件时,这样可以把程序执行时的流程简化。

 

19.get和post的区别

  1. get通过url传参,post放在request body中;
  2. Get传参有大小限制,post没有;
  3. Get传参url可见,post不可见,所以post相对安全。

 

20.php设计模式有哪些?请举例说明

php设计模式有:单例模式、工厂模式、装饰器模式、适配器模式、观察者模式、原型模式、策略模式、注册模式等

单例模式:

解决整个项目中创建唯一对象的实例,一旦创建就会一直存在于内存中。应用于数据库设计,防止打开多个数据库连接。

代码实现:

Class Single{

    private static $instance;

    private function __construct(){}

    private function __clone(){}

    public static function getInstance(){

        If(empty(self::$instance)){

            self::$instance = new Single();

        }

        return self::$instance;

    }

}

 

21.请写出快速排序代码

function quickSort($arr){

    $count = count($arr);

    if($count<=1) return $arr;

    $baseValue = $arr[0];

    $left = $right = array();

    for($i=1;$i<$count;$i++){
        if($arr[$i]<$baseValue){
            $left[] = $arr[$i];
        }else{
            $right[] = $arr[$i];
        }
    }

    $left = quickSort($left);
    $right= quickSort($right);

    return array_merge($left,array($baseValue),$right);
}

 

22.简述PHP的垃圾回收机制

每个PHP变量都存储在‘zval’的变量容器中。一个zval变量容器除了包含变量的类型和值,还包括两个额外字段,‘is_ref’布尔类型值,通过此字节区分普通变量和引用变量。‘refcount’,用以表示指向这个变量容器的个数。如果recount为0,就会回收该变量容器。若有一个zval的refcount大于1,它就会进入到垃圾缓冲区,当缓冲区达到最大值后,回收算法会循环遍历zval,判断是否为垃圾,并进行释放处理。

答案和面试题欢迎评论区域补充,感谢浏览

你可能感兴趣的:(PHP,PHP面试题)