PHP 面试题及答案

2025 年 6 月 4 日 | 阅读 18 分钟
PHP Interview Questions

本文列出了多家公司在 PHP 面试中常问的 PHP 面试题及答案。让我们来看看这份 PHP 面试题列表。

1) 什么是 PHP?

PHP 是 "Hypertext Preprocessor" 的缩写。它是一种开源的服务器端脚本语言,广泛用于 Web 开发。它支持多种数据库,如 MySQL、Oracle、Sybase、Solid、PostgreSQL、通用 ODBC 等。

阅读更多: PHP 教程


2) PHP 中的 PEAR 是什么?

PEAR 是一个框架和可重用 PHP 组件的存储库。PEAR 是 PHP 扩展和应用程序存储库的缩写。它包含各种类型的 PHP 代码片段和库。它还提供了一个命令行界面来自动安装“包”。

阅读更多: PHP PEAR


3) 谁被称为 PHP 之父?

Rasmus Lerdorf 被认为是 PHP 的创造者,他于 1994 年使用它来管理他网站的访问者数量。


4) PHP 的旧名称是什么?

PHP 最初代表“Personal Home Pages”(个人主页),表明其用于构建个人网站。


5) 解释静态网站和动态网站的区别。

在静态网站上,所有访问者都会看到相同的信息,因为 HTML 没有自动更改。此类网站所需的时间和精力比其他网站少,尽管它们很简单且缺少活动元素。

对于动态网站,服务器使用脚本(如 PHP)在请求时生成内容。它可以显示为您量身定制的内容,从数据库获取信息,并在用户输入或单击时做出反应——所有这些都使其非常适合网站、博客和在线购物等场景。


6) PHP 中的脚本引擎名称是什么?

PHP 脚本引擎被称为 Zend Engine。自 PHP 7 起,引入了 Zend Engine 3,这有助于该语言运行得更快,并且比 PHP 5 中的 Zend Engine 2 消耗更少的内存。


7) 新 PHP 版本带来了哪些主要变化?

PHP 4:PHP 4 首次提供了 Zend Engine 1,但对面向对象编程 (OOP) 的支持很少。

PHP 5:引入了类和异常,并允许使用 PDO 来简化数据库访问。它运行在 Zend Engine 2 上。

PHP 7:使用 Zend Engine 3,PHP 7 运行速度更快,允许指定标量类型,具有新的返回类型、null 合并运算符(??)和匿名类。

PHP 8:引入了即时 (JIT) 编译、联合类型、命名参数功能、对属性(注解)的支持以及 match 表达式,以提高性能并使语言更加灵活。


8) PHP 中流行的内容管理系统 (CMS) 有哪些?

WordPress:WordPress 是一个免费开源的内容管理系统 (CMS),基于 PHP 和 MySQL。它包含插件架构和模板系统。它主要与博客相关,但也支持其他类型的 Web 内容,包括传统的邮件列表和论坛、媒体展示和在线商店。

Joomla:Joomla 是由 Open Source Matters, Inc. 创建的免费开源内容管理系统 (CMS),用于分发 Web 内容。它基于模型-视图-控制器 (MVC) Web 应用程序框架,该框架可以独立于 CMS 使用。

Magento:Magento 是一个由 Varien Inc. 开发的开源电子商务平台,对在线业务非常有用。它具有灵活的模块化设计,并且用途广泛,具有对客户有用的许多控制选项。Magento 利用电子商务平台,为企业提供强大的电子商务解决方案和广泛的支持网络。

Drupal:Drupal 是一个用 PHP 开发的 CMS 平台,并在 GNU (General Public License) 下分发。


9) PHP 中流行的框架有哪些?

CakePHP:这是一个快速的框架,应用 MVC 模式,通过提供有用的内置工具简化了 Web 应用程序的构建过程。

CodeIgniter:这个框架很小巧,容易上手,是初学者的不错选择。

Yii 2:一个高性能的框架,使用较小的组件来帮助构建大型应用程序,并附带 Gii 代码生成器等有用工具和良好的安全性。

Symfony:一个用于大型项目的成熟系统,提供对可重用工具的访问和广泛的支持。

Zend Framework (现为 Laminas):该框架的构建重点是企业级应用程序的设计,并强调功能和标准对专业开发人员是可扩展的。

阅读更多: PHP 框架


10) PHP 的特点是什么?

PHP 用于服务器端创建 Web 应用程序。以下是它显示的主要功能:

  • 开源且免费使用。
  • 您可以在 Windows、Linux 和 macOS 上使用它。
  • 它的语法非常类似于 C 和 Perl,这意味着使用这些语言的程序员会发现 PHP 更容易使用。
  • 可以直接嵌入到 HTML 中。
  • 几乎所有 Python 框架都支持 MySQL、PostgreSQL 和 SQLite。
  • 使用 JavaScript 可以使网站响应迅速,并受到开发人员的欢迎。

阅读更多:PHP 特性


11) 列出 PHP 8 的一些特性,并将其与 PHP 7 进行比较。

与 PHP 7 相比,PHP 8 进行了多项改进。我们已按如下方式总结了每项功能和主要区别:

特性PHP 8PHP 7
JIT(即时)编译器通过在程序执行期间生成优化程序来提高性能。没有 JIT 支持;运行 Python 代码的唯一方法是使用传统解释器。
命名参数通过名称传递参数提高了可读性。仅支持位置参数。
属性(注解)允许使用 #[Attr] 直接将元数据附加到类和函数。PHP 中的代码需要特定的注释或使用库。
联合类型现在可以使用不同的类型(`int` 和 `float`)作为函数输入。<text>
推广构造函数属性在创建对象的构造函数中设置和创建属性。每个映射对象都必须包含属性的强制赋值。
空安全运算符 (?->)一种安全地读取对象属性或访问对象方法而无需显式 null 检查的方法。需要使用嵌套的 if 语句进行 null 检查。
Match 表达式增强的 switch 语句的比较和返回值版本。仅在使用变量进行松散比较时更改变量的名称。
改进的类型错误更清晰、更易于理解的错误消息。处理提交或查询问题有时会缺乏必要的细节。

除了 PHP 7 提供的功能外,最新版本还使开发更容易,更有效地解决错误,并为现代系统提供了新功能。


12) PHP 中的 "echo" 是什么?

PHP echo 输出一个或多个字符串。它是一个语言结构,而不是一个函数。因此,不需要使用括号。但如果要向 echo 传递多个参数,则需要使用括号。

语法

阅读更多: PHP Echo


13) PHP 中的 "print" 是什么?

PHP print 输出一个字符串。它是一个语言结构,而不是一个函数。因此,在参数列表时不需要使用括号。与 echo 不同,它始终返回 1。

语法

阅读更多:PHP Print


14) "echo" 和 "print" 在 PHP 中有什么区别?

Echo 可以输出一个或多个字符串,而 print 只能输出一个字符串并始终返回 1

Echoprint更快,因为它不返回值。


15) 如何在 PHP 中声明一个变量?

PHP 变量是保存数据的内存位置的名称。它是临时存储。

语法

阅读更多: PHP 变量


16) $message 和 $$message 有什么区别?

$message存储变量数据,而 $$message 用于存储变量变量

$message 存储固定数据,而 $$message 中存储的数据可以动态更改。

阅读更多: PHP $ 和 $$


17) 定义 PHP 常量有哪些方法?

PHP 常量是名称或标识符,在脚本执行期间无法更改。PHP 常量有两种定义方式:

  • 使用 define() 函数
  • 使用 const() 函数

阅读更多: PHP 常量


18) PHP 中有哪些魔术常量?

PHP 魔术常量是预定义的常量,其值取决于其使用方式。它们以双下划线(__)开头并以双下划线(__)结尾。

阅读更多: PHP 魔术常量


19) PHP 有多少种数据类型?

PHP 数据类型用于保存不同类型的数据或值。共有八种基本数据类型,进一步分为三种类型:

  • 标量类型
  • 复合类型
  • 特殊类型

阅读更多: PHP 数据类型


20) 如何在 PHP 中进行单行和多行注释?

PHP 单行注释有两种方式:

  • 使用 //(C++ 风格单行注释)
  • 使用 #(Unix Shell 风格单行注释)

PHP 多行注释是通过将所有行包含在其中来完成的。

阅读更多:PHP 注释


21) PHP 中有哪些不同的循环?

PHP 中的 for、while、do-whileforeach 循环用于根据特定条件或元素集合重复执行以下代码行。


22) count() 函数在 PHP 中的用途是什么?

PHP count() 函数用于计算数组或对象中的总元素


23) header() 函数在 PHP 中的用途是什么?

header() 函数用于向客户端发送原始 HTTP 标头。它必须在发送实际输出之前调用。例如,在使用此函数之前,您不能打印任何 HTML 元素。


24) isset() 函数是什么?

isset() 函数检查变量是否已定义且不为 null。


25) 解释 PHP 参数化函数。

参数化函数允许同一个函数通过在调用时传递值(参数)来响应不同的输入。

示例

输出

Hello, Alice!

这使得代码可以重用和灵活,让函数根据传递的参数执行不同的操作。

阅读更多: PHP 参数化函数


26) 解释 PHP 可变参数函数

PHP 支持可变参数函数。这意味着您可以在函数中传递 0、1 或 n 个参数。要做到这一点,您需要在参数名称前使用三个省略号(点)。自 PHP 5.6 起,已实现此三点概念用于可变参数。

阅读更多: PHP 可变参数函数


27) PHP 中的超全局变量是什么?

超全局变量始终存在于 PHP 中,您可以从任何作用域使用它们。示例包括:

$_GET:来自 URL 参数的数据

$_POST:来自表单提交的数据

$_SESSION:会话变量

$_COOKIE:cookie

$_SERVER:服务器和执行环境信息

它们简化了整个 PHP 应用程序的数据处理。


28) PHP 中的数组是什么?

数组用于在一个值中存储多个值。在 PHP 中,它映射键值对的集合。它保存数据类型的集合。

阅读更多:PHP 数组


29) PHP 中有多少种类型的数组?

PHP 中有三种类型的数组:

  1. 索引数组:带有数字键的数组。
  2. 关联数组:其中每个键都有其特定值的数组。
  3. 多维数组:包含一个或多个数组的数组。

30) 解释一些 PHP 数组函数。

PHP 中的数组函数如下:

array():创建一个新数组。

array_change_key_case():将数组中所有键的大小写更改为大写或小写。

array_chunk():将数组分割成指定大小的小块。

count():返回数组中元素的数量。

sort():按升序对索引数组进行排序,并重新索引数组。

array_reverse():返回一个元素顺序颠倒的数组。

array_search():在数组中搜索一个值,如果找到则返回其键。

array_intersect():比较两个或多个数组,并返回所有数组共有的值。

阅读更多: PHP 数组函数


31) 索引数组和关联数组有什么区别?

索引数组以索引形式保存元素,该索引由从 0 开始并递增 1 的数字表示。例如:

关联数组以名称保存元素。例如:


32) 如何获取 PHP 字符串的长度?

strlen() 函数有助于计算字符串中每个字符的数量,无论它们是否是字母数字。

语法

示例

输出

11

阅读更多: PHP 字符串函数


33) 解释一些 PHP 字符串函数。

PHP 的字符串函数如下:

strtolower():将字符串中的所有字符转换为小写。

strtoupper():将字符串中的所有字符转换为大写。

ucfirst():将字符串的第一个字符大写。

lcfirst():将字符串的第一个字符转换为小写。

ucwords():将字符串中每个单词的第一个字符大写。

strrev():反转字符串。

strlen():返回字符串的长度(字符数)。


34) 提交表单的 PHP 方法有哪些?

PHP 提供两种通过 GET 或 POST 将表单发送到服务器的方法。它们决定了将表单数据发送到服务器的过程。

阅读更多:PHP 表单


35) 如何在没有提交按钮的情况下提交表单?

只需在表单中添加 JavaScript 的 submit() 方法即可提交表单。因此,数据可以在某些事件发生时由表单自动发送,而无需单击按钮。


36) 包含文件的 PHP 方法有哪些?

PHP 允许您包含文件,以便页面内容可以重复使用。在 PHP 中添加文件的有两种方式。

  1. include
  2. require(需要)

阅读更多:PHP 包含文件


37) 区分 require 和 include?

requireinclude 都用于包含文件,但如果找不到数据,include 会发送警告,而 require 会发送致命错误


38) 解释 PHP 的 setcookie() 函数?

PHP setcookie() 函数用于设置带有 HTTP 响应的 cookie。设置 cookie 后,可以通过 $_COOKIE 超全局变量访问它。

语法

阅读更多: PHP Cookie


39) 如何检索 cookie 值?

PHP 允许您使用 $_COOKIE 超全局变量获取 cookie 值。例如:


40) 什么是会话?

PHP 引擎创建一个逻辑对象来在后续的 HTTP 请求中保存数据,这就是会话。

会话通常存储临时数据,以便多个 PHP 页面可以为同一个用户提供完整的事务功能。

简而言之,它维护用户(浏览器)的数据。

阅读更多: PHP 会话


41) 什么是 PHP 中的会话处理?

通过会话处理,您可以为加载的每个页面保存用户信息。PHP 通过保存在用户浏览器中的特殊会话 ID 来实现此目的。

示例


42) PHP 中的 $_SESSION 是什么?

PHP 中的 $_SESSION 允许一个用户在多个页面之间存储数据。由于会话数据存储在服务器上,因此比 cookie 更安全。

您应该在脚本开头调用 session_start() 来使用 $_SESSION,如下所示:

示例

输出

prachetyerr

会话通常用于验证用户、管理购物车项以及在会话期间保存他们的选择。


43) PHP 的 session_start() 和 session_destroy() 函数是什么?

PHP session_start() 函数用于启动会话。它启动新会话或恢复当前会话。如果已创建会话,它将返回当前会话。如果会话不可用,它将创建并返回新会话。


44) 会话和 cookie 有什么区别?

会话和 cookie 的主要区别在于cookie 以文本文件格式存储在用户的计算机上,而会话存储在服务器端

Cookie 无法保存多个变量;另一方面,会话可以保存多个变量。

您可以手动设置 cookie 的过期时间,而会话仅在浏览器打开期间保持活动状态。


5) 在 PHP 中打开文件的语法是什么?

PHP fopen() 函数用于打开文件或 URL 并返回资源。它接受两个参数:$filename 和 $mode。

语法

阅读更多:PHP 打开文件


46) 如何在 PHP 中读取文件?

PHP 提供了各种函数来从文件读取数据。不同的函数允许您读取所有文件数据、逐行读取数据以及逐字符读取数据。

PHP 文件读取函数如下:

  • fread()
  • fgets()
  • fgetc()

阅读更多: PHP 读取文件


47) 如何在 PHP 中写入文件?

PHP fwrite() 和 fputs() 函数用于将数据写入文件。要将数据写入文件,您需要使用 w、r+、w+、x、x+、c 或 c+ 模式。

阅读更多:PHP 写入文件


48) 如何在 PHP 中删除文件?

unlink() 函数用于在 PHP 中删除文件。

语法

阅读更多: PHP 删除文件


49) 从命令行执行 PHP 脚本的方法是什么?

您只需运行 PHP 命令行界面 (CLI) 并指定要执行的脚本文件名,如下所示。


50) 如何在 PHP 中上传文件?

move_uploaded_file() 函数用于在 PHP 中上传文件。

语法

阅读更多: PHP 文件上传


51) 如何在 PHP 中下载文件?

readfile() 函数用于在 PHP 中下载文件。

阅读更多: PHP 下载文件


52) 如何在 PHP 中发送电子邮件?

mail() 函数用于在 PHP 中发送电子邮件。

阅读更多: PHP 邮件


53) 如何将 MySQL 数据库与 PHP 连接?

有两种方法可以将 MySQL 数据库与 PHP 连接:过程式风格和面向对象风格。

过程式风格:需要使用 mysqli_connect() 等函数来创建链接。它并不复杂,对于简单的脚本来说效果很好。

面向对象风格:使用 new mysqli() 建立数据库连接。它看起来更好,并且在具有许多部分的应用程序中更受欢迎。

阅读更多: PHP MySQL 连接


54) 如何在 PHP 中创建连接?

mysqli_connect() 函数用于在 PHP 中创建连接。

语法


55) 如何在 PHP 中创建数据库连接和查询?

自 PHP 4.3 起,mysql_create_db() 已被弃用。现在,您可以使用以下两种替代方法:

  • mysqli_query()
  • PDO::_query()

阅读更多: PHP MySQL 创建


56) 如何增加 PHP 脚本的执行时间?

默认情况下,PHP 脚本的最大执行时间设置为 30 秒。如果脚本运行时间超过 30 秒,PHP 将停止脚本并返回错误。

您可以通过更改 php.ini 文件中的 max_execution_time 指令来更改脚本运行时间。

当调用脚本时,set_time_limit 函数会从零重新启动超时计数器。这意味着如果默认计时器设置为 30 秒,并且在 set_time_limit() 函数中指定了 20 秒,那么脚本将运行 45 秒。如果在此函数中定义了 0 秒,则脚本将无限期运行。


57) PHP 中有哪些不同类型的错误?

PHP 中有三种类型的错误:

  1. Notice (通知):这些是次要错误。这些错误不会显示给用户。
  2. Warnings (警告):这些是更严重的错误,但它们不会导致脚本终止。默认情况下,这些错误会显示给用户。
  3. Fatal Errors (致命错误):这些是最严重的错误。这些错误可能导致脚本立即终止。

58) 如何停止执行 PHP 脚本?

exit() 函数用于停止执行 PHP 脚本。


59) PHP 中的加密函数有哪些?

PHP 使用crypt() 以单向格式哈希字符串,使用md5() 为任何字符串生成一个 32 个十六进制字符的哈希值。


60) PHP 中的 htaccess 是什么?

.htaccess 是 Apache 服务器上的一个配置文件。您可以使用 .htaccess 和 httpd.conf 等 Apache 配置文件中的指令来更改配置设置。


61) 解释 PHP explode() 函数。

PHP 的 explode() 函数允许通过分隔符将字符串分割成更小的片段。例如,explode(",", "apple, banana, orange") 将返回一个包含元素 ["apple", "banana", "orange"] 的数组。


62) 解释 PHP split() 函数。

PHP 的 split() 函数使用正则表达式将字符串分解为数组。但是,自 PHP 5.3.0 起,它已不再受支持,并且在 PHP 7.0 中不可用。您应该优先使用 preg_split()。

使用 split() 的示例(已弃用)

使用 preg_split() 的推荐替代方案


63) 如何获取客户端的 IP 地址?

要获取客户端的 IP 地址,您可以使用 $_SERVER["REMOTE_ADDR"] 变量。名为 "REMOTE_ADDR" 的 PHP $_SERVER 变量将返回客户端的 IP 地址。服务器变量保存当前查看此页面的用户的 IP 地址。

示例

  • $_SERVER 是 PHP 中的一个数组,其中包含有关标头、路径和脚本位置的信息。
  • "REMOTE_ADDR" 包含直接访问页面的 IP 地址。

注意:如果用户位于代理服务器或负载均衡器后面,您可能需要检查 $_SERVER["HTTP_X_FORWARDED_FOR"] 或类似的标头来获取真实的 IP 地址。


64) 持久 cookie 的含义是什么?

持久 cookie 会永久存储在浏览器计算机上的 cookie 文件中。默认情况下,cookie 是临时的,关闭浏览器时会被删除。


65) imagetypes() 函数的用途是什么?

在 PHP 中,使用 imagetypes() 函数提供一个位字段,反映 GD 库对可用图像格式的支持。它用于查看您可以生成和修改哪些文件(例如 JPEG、PNG、GIF 等)。

示例


66) include() 和 require() 函数是什么?

Include() 函数用于将一个 PHP 文件的内容包含到另一个 PHP 文件中。如果发生错误,include() 函数会产生警告,但不会停止脚本的执行,并且会继续执行。

require() 函数也用于将一个 PHP 文件的内容包含到另一个 PHP 文件中。如果发生任何错误,require() 函数会产生警告和致命错误,并停止脚本。


67) 什么是 Cookie?如何在 PHP 中创建 Cookie?

Cookie 用于识别用户。Cookie 是服务器在客户端计算机上安装的一个小记录。每次同一台计算机请求带有程序的页面时,都会发送该 Cookie。使用 PHP,您可以创建和恢复 Cookie 值。

您可以使用 setcookie() 函数在 PHP 中创建 Cookie。

语法

其中,

  • name: Cookie 的名称。
  • value: Cookie 的值。
  • expire: 过期时间(Unix 时间戳)。
  • path: Cookie 在服务器上可用的路径。
  • domain: Cookie 可用的域。
  • secure: 如果为 true,则 Cookie 仅通过安全的 HTTPS 连接传输。
  • httponly: 如果为 true,则只能通过 HTTP 访问 Cookie(不能通过 JavaScript 访问)。

示例


68) PHP 解析器的重要性是什么?

PHP 解析器解析从开始标记到结束标记的 PHP 开发的网站。标记指示 PHP 代码从何处开始和结束。换句话说,开始和结束标记决定了 PHP 脚本语法的结束标记的范围。

PHP 中开始标记的语法

PHP 中结束标记的语法


69) 如何使用 PHP 和 MySQL 创建数据库?

使用 PHP 创建 MySQL 数据库的必要步骤是:

  • 从 PHP 脚本建立到 MySQL 服务器的连接。
  • 如果连接成功,请编写一个 SQL 查询来创建数据库并将其存储在字符串变量中。
  • 执行查询。

70) PHP-FPM 是什么,为什么使用它?

PHP-FPM (FastCGI Process Manager) 是为应对高流量网站的需求而开发的。它通过使用一组工作进程来确保请求被更有效地处理,并为 Web 应用程序提供进程管理功能,例如平稳的停止和启动,以及自适应的进程创建。


71) isset() 和 empty() 函数在 PHP 中的用途是什么?

  • isset($var) 检查变量是否已设置且不为 null。
  • empty($var) 检查变量是否为空(即,false、0、''、null、[] 等)。
  • 它们都可以用于处理用户输入和变量可用性。

72) PHP 中的 PDO 是什么?它与 MySQLi 有何不同?

PDO(PHP Data Objects)是一个数据库访问抽象层,它允许使用相同的接口访问多种数据库类型。与仅适用于 MySQL 的 MySQLi 不同,PDO 支持 PostgreSQL、SQLite 等多种数据库。它还支持命名占位符,并通过预处理语句提供更好的安全性。


73) PHP 中的魔术方法是什么?举例说明。

魔术方法是特殊的函数,以 __ 开头,并提供对对象行为的钩子。示例包括:

__construct():构造函数

__destruct():析构函数

__get()__set():重载访问

__call():处理未定义的方法调用

它们提供了更动态和受控的类行为。


74) $_SERVER 超全局变量在 PHP 中的用途是什么?

$_SERVER 是一个 PHP 超全局变量,其中包含有关标头、路径和脚本位置的信息。例如,$_SERVER['HTTP_USER_AGENT'] 提供用户的浏览器信息,而 $_SERVER['REQUEST_METHOD'] 返回请求类型(GET、POST 等)。


75) 如何在 PHP 中安全地处理文件上传?

安全的文件上传涉及:

  • 使用 $_FILES 数组访问上传数据
  • 检查 MIME 类型和文件扩展名
  • 设置大小限制
  • 使用 move_uploaded_file() 将文件安全地移动到所需目录
  • 始终对文件名进行清理并验证用户输入,以防止安全风险。