2020年PHP经典面试题库汇总:涵盖基础、高级、数据库、面向对象及主流框架
2020PHP经典面试题库汇总,包括如下部分:

PHP基础部分
PHP 高级部分
数据库相关
面向对象部分
ThinkPHP框架
Laravel 框架
smarty模板引擎
开发实战部分
微信公众平台开发
综合技术
PHP 高级部分
PHP 处理数据库的常用函数有哪些?需要重点关注这些函数的“参数”以及“返回值”。
mysqli_connect()
待完善
PHP 操作文件有哪些常用函数呢?重点要看这些函数的“参数”以及“返回值”。
①打开文件;
②删除文件;
③读取文件;
④写入文件;
⑤修改文件;
⑥关闭文件;
⑦创建文件等等,
待完善
PHP 操作目录(文件夹)有哪些常用函数呢?重点要关注这些函数的“参数”以及“返回值”。
打开目录,删除目录,读取目录,创建目录,修改目录,关闭目录等操作。此项极为重要,在工作中常被用于创建或删除上传文件的目录,以及创建或删除缓存、静态页面的目录,需参照 php 手册认真查看。
待完善
4、什么是面向对象?(理解着回答)
面向对象 OO 包含面向对象的分析 OOA、面向对象的设计 OOD 以及面向对象的编程 OOP;通俗来讲就是“万物皆对象”,即将所有事物都视为一个个能够独立存在的对象(单元),这些对象能够自行完成自身的功能,而不像 C 语言那样将其划分成一个个函数。
现在纯正的面向对象(OO)语言主要有 Java 和 C#。PHP 也支持面向对象,C++同样支持面向对象。C 是面向过程的。
简述 public 修饰符的访问权限。
答:
private : 私有成员, 在类的内部才可以访问。
保护成员,其在该类的内部是可以被访问的,并且在继承类中也能够被访问。
public : 公共成员,完全公开,没有访问限制。
6、堆和栈的区别?
栈是在编译期间就被分配好的内存空间。所以,在你的代码里,必须对栈的大小有明确的定义。
堆是在程序运行期间会被动态分配的内存空间。你能够依据程序的运行状况来确定需要分配的堆内存的大小。
7、XML 与 HTML 的主要区别
答:(1) XML是区分大小写字母的,HTML不区分。
在 HTML 中,若上下文能清晰表明段落或列表键的结尾位置,那么你便可以省去相应的结尾标识。
或者
之类的结束 标记。在XML中,绝对不能省略掉结束标记。
在 XML 中,存在这样一种情况,即有单个标记且没有与之匹配的结束标记的元素,这种元素必须用一个 / 字符来作为结尾。通过这种方式,分析器就能够知晓无需再去查找结束标记了。
在 XML 里,属性值得被分装在引号内。而在 HTML 中,引号用或者不用都是可以的。
在 HTML 里,能够存在不带值的属性名。而在 XML 中,所有的属性都一定要带有与之对应的值。
8、面向对象的特征有哪些方面?
答:主要有封装,继承,多态。如果是4个方面则加上:抽象。
下面的解释为理解:
封装:
封装能确保软件部件具备优良的模块性。其目标在于达成软件部件的高内聚与低耦合,避免因程序的相互依赖性而引发变动影响。
继承:
定义和实现一个类时,可以基于一个已存在的类。将已存在类所定义的内容当作自己的内容,还可以加入一些新内容,或者修改原来的方法使其更符合特殊需求,这就是继承。继承是子类能自动共享父类数据和方法的机制,它是类之间的一种关系,能提升软件的可重用性和可扩展性。
多态:
程序中定义的引用变量所指向的具体类型以及通过该引用变量发出的方法调用,在编程时是不确定的。这些在程序运行期间才会确定。也就是说,一个引用变量到底会指向哪个类的实例对象,以及该引用变量发出的方法调用到底是哪个类中实现的方法,都必须在程序运行期间才能决定。
抽象:
抽象的过程是找出一些事物的相似和共性之处,接着把这些事物归为一个类,这个类只关注这些事物的相似和共性方面,同时会把与当前主题和目标无关的那些方面忽略掉,从而将注意力集中在与当前目标有关的方面。比如,当看到一只蚂蚁和一头大象时,你能够想象出它们的相同之处,这就是抽象。
9、抽象类和接口的概念以及区别?
答:
抽象类:
它是一种特殊的类,这种类不能被实例化,只能作为其他类的父类来使用。并且需要使用 abstract 关键字进行声明。
接口:
它是一种特殊的类,这种类是抽象类,并且它使用 interface 进行声明。
区别:
抽象类的操作通过“extends”关键字来达成。接口的使用则借助“implements”关键字来完成。
抽象类中存在数据成员,能够实现数据的封装。然而,接口是没有数据成员的。
(3)抽象类中可以有构造方法,但是接口没有构造方法。
抽象类的方法能够用 private 关键字修饰,也能够用 protected 关键字修饰,还能够用 public 关键字修饰(需要注意的是,抽象方法不可以是 private 的);接口中的方法只可以使用 public 关键字来修饰。
一个类仅能从一个抽象类进行继承,同时一个类能够在同一时间实现多个接口。
抽象类能够包含成员方法的实现代码,然而接口却不可以有成员方法的实现代码。
10、什么是构造函数,什么是析构函数,作用是什么?
构造函数(方法)是在对象创建完成后首先被对象自动调用的方法。每个声明的类中都存在它,它是一个特殊的成员方法。其作用是执行一些初始化的任务。在 Php 中,通过__construct()来声明构造方法,并且只能声明一个。
析构函数(方法)的作用与构造方法恰好相反,它是在对象被销毁之前,最后一个由对象自动调用的方法。这是 PHP5 中新添加的内容,其作用是在销毁一个对象之前,执行一些特定的操作,比如关闭文件和释放内存等。
11、如何重载父类的方法,举例说明
重载指的是覆盖父类的方法,意味着用子类中的方法去替换从父类中继承而来的方法,同时也被称作方法的重写。
覆盖父类方法的要点在于,在子类里创建与父类中相同的方法,这里的相同包括方法的名称、参数以及返回值类型。在 PHP 中,只需要方法的名称相同就可以了。
12、常用的魔术方法有哪些?举例说明
php 规定,以两个下划线开头的方法会被保留为魔术方法。因此,建议大家在编写函数名时,最好不要使用开头这种方式,除非是为了重载已经存在的魔术方法。
__construct() 实例化类时自动调用。
__destruct() 类对象使用结束时自动调用。
__set() 在给未定义的属性赋值的时候调用。
__get() 调用未定义的属性时候调用。
使用 empty() 函数时也会调用 isset() 或 empty() 函数。
__unset() 使用unset()时候会调用。
__sleep() 使用serialize序列化时候调用。
在使用 unserialize 进行反序列化时会调用 wakeup()。
__call() 调用一个不存在的方法的时候调用。
callStatic()调用一个不存在的静态方法,这属于一种调用行为。
当把对象转换成字符串时会调用 toString() 方法。例如在使用 echo 时。
__invoke() 当尝试把对象当方法调用时调用。
使用 var_export()函数时会调用__set_state()。它接受一个数组参数。
__clone() 当使用clone复制一个对象时候调用。
parent 这个关键词代表什么?在哪些场合下使用?
答:
$this 当前对象
self 当前类
parent 当前类的父类
$this在当前类中使用,使用->调用属性和方法。
self也在当前类中使用,不过需要使用::调用。
parent在类中使用。
类中怎样定义常量呢?类中如何调用常量呢?又如何在类外调用常量呢?
类中的常量即为成员常量,常量意味着不会发生改变的量,它是一个恒值。
定义常量使用关键字const.
例如:const PI = 3.1415326;
类内和类外的情况中,常量的访问与变量有所不同。常量无需进行实例化对象这一操作。
访问常量的格式都是类名加作用域操作符号(双冒号)来调用。
即:类名 :: 类常量名;
15、作用域操作符::如何使用?都在哪些场合下使用?
答:调用类常量
调用静态方法
16、__autoload()方法的工作原理是什么?
使用这个魔术函数的基本条件在于类文件的文件名需与类的名字保持一致。
当程序执行到要实例化某个类的时候,如果在实例化这个类之前没有引入这个类的文件,那么就会自动去执行__autoload()函数。
这个函数会依据实例化的类的名称去查找该类文件的路径,接着判断在这个类文件路径之下确实存在这个类文件。
执行 include 或者 require 以载入该类,接着程序会继续执行。倘若这个路径下不存在该文件,就会提示错误。
使用自动载入的魔术函数,就不需要写很多个 include 或者 require 函数了。