PHP面试题和答案合集:哪些问题最常见?

2021年12月12日19:24:25 发表评论 217 次浏览

PHP 代表PHP:超文本预处理器是一种广泛使用的开源服务器端脚本语言,特别适用于创建动态网站和移动 API。

PHP 支持许多数据库,如 MySQL、Solid、PostgreSQL、Oracle、Sybase、通用 ODBC 等。 PHP 代码嵌入在 HTML 中。

它用于管理动态内容、会话跟踪、数据库,还用于构建整个电子商务站点。
默认情况下,大多数网络托管服务器都支持 PHP,因此它有助于提高成本效益。

PHP的范围

PHP 之所以成为顶级语言之一,是因为它能够以很少的代码对结果产生很大的影响。在过去几年中,这种效率一直是行业的要求。

看到这一点,公司正在投资大量资金聘请熟练的 PHP 开发人员来适应这些鞋子并有效地工作。

今天,本文将带你了解最常被问到的 PHP 面试问题,适用于行业内的新生和有经验的人。

应届生PHP面试题和答案合集

1、PHP中变量和常量的区别

PHP面试题解析:PHP 中变量和常量的区别如下:

变量常数
变量的值可以在执行期间更改。在脚本执行期间不能更改常量值。
变量要求在开始时强制使用 $ 符号。在使用常量之前不需要美元符号 ($)。
可以通过简单的赋值来定义变量。常量不能通过简单的赋值来定义。它们是使用define() 函数定义的。
默认范围是当前访问范围。可以在没有任何范围规则的情况下访问常量。

2. PHP常见面试题有哪些:PHP 中的会话是什么?

PHP 中的会话是一种存储要在整个网站的多个页面上使用的信息的方法。与 cookie 不同,该信息不会存储在用户的计算机上。在服务器上的临时目录中,会话将创建一个文件,其中存储已注册的会话变量及其值。该信息将在访问期间提供给网站上的所有页面。

当你使用应用程序时,你会打开它,进行一些修改,然后关闭它。这很像一个会话。计算机知道你是谁。它知道应用程序何时由你启动和结束。

但是在 Internet 上,网络服务器不知道你是谁或你在做什么,因为 HTTP 地址不保持状态。这个问题是使用会话变量通过存储跨多个页面使用的用户信息(例如用户名、最喜欢的颜色等)来解决的。

默认情况下,会话变量将持续到用户关闭浏览器。

因此会话变量保存单个用户信息,并且可用于一个应用程序中的所有页面。

3. PEAR 代表什么?

PEAR 代表“PHP 扩展和应用程序存储库”。PEAR 是所有可重用 PHP 组件的框架和存储库。

PEAR 为 Web 开发人员提供了更高级别的编程。它包含各种 PHP 代码片段和库。它还为你提供了一个命令行界面来自动安装软件包。

4.解释$message和$$message的区别。

$message 和 $$message 的主要区别如下:

$message$$message
$message 是一个常规变量。$$message 是一个参考变量。
它有一个固定的名称并存储一个固定的值。它存储有关变量的数据。
存储在 $message 中的数据是固定的。$$message 的值可以随着变量值的变化而动态变化。

5. PHP 是区分大小写的语言吗?

PHP 可以被认为是一种部分区分大小写的语言。变量名完全区分大小写,但函数名不是。此外,用户定义的函数不区分大小写,但语言的其余部分区分大小写。

例如,PHP 中的用户自定义函数可以定义为小写,但稍后引用为大写,它仍然可以正常运行。

6. PHP 中有哪些不同类型的变量?

PHP面试题和答案合集:哪些问题最常见?
PHP 变量的类型

PHP 中有 8 种主要数据类型用于构造变量。他们是:

  • 整数:整数是没有浮点数的整数。例如:1253。
  • double:double是浮点数。例如:7.876
  • 布尔值:它代表两种逻辑状态——真或假。
  • NULL:NULL 是一种特殊类型,它只有一个值,即 NULL。当变量没有赋值时,可以赋值为NULL。
  • 数组:数组是相似类型数据的命名和有序集合。例如: $colors = array("red", "yellow", "blue");
  • 字符串:字符串是一个字符序列。例如:“你好,InterviewBit!”
  • 资源:资源是特殊变量,包含对 PHP 外部资源的引用(例如数据库连接)。
  • 对象:包含数据和函数的类的实例。例如:$mango = new Fruit();

7. PHP 变量的命名规则是什么?

命名 PHP 变量时需要遵循以下两条规则:

  • 变量必须以美元符号开头,后跟变量名称。例如:$price=100;其中 price 是一个变量名。
  • 变量名必须以字母或下划线开头。
  • 变量名可以由字母、数字或下划线组成。但是你不能使用 + 、 – 、 % 、 & 等字符。
  • PHP 变量名不能包含空格。
  • PHP 变量区分大小写。所以 $NAME 和 $name 都被视为不同的变量。

8. PHP 中的“echo”和“print”有什么区别?

PHP面试题解析:PHP 中 echo 和 print 的主要区别如下:

echoprint
echo 可以输出一个或多个字符串。print 只能输出一个字符串,并且总是返回 1。
echo 比 print 快,因为它不返回任何值。与回声相比,打印速度较慢。
如果要向 echo 传递多个参数,则应使用括号。参数列表不需要使用括号。

9.告诉我PHP的一些缺点

PHP 的缺点是:

  • PHP 不适用于基于内容的巨型 Web 应用程序。
  • 因为它是开源的,所以不安全。因为 ASCII 文本文件很容易获得。
  • PHP 不允许更改或修改在线应用程序的核心行为。
  • 如果我们使用更多的PHP框架和工具的特性,就会造成在线应用的性能不佳。
  • PHP 处理错误的质量很差。PHP 缺少查找警告和错误所需的调试工具。与其他编程语言相比,它只有少数调试工具。

中级PHP面试题和答案合集

10、PHP和HTML如何交互?

PHP 脚本具有生成 HTML 的能力,并且可以将信息从 HTML 传递到 PHP。

PHP 是一种服务器端语言,而 HTML 是一种客户端语言。因此 PHP 在服务器端执行并以字符串、对象、数组的形式获取其结果,然后我们使用它们以 HTML 格式显示其值。

这种互动有助于弥合差距并利用两种语言的优点。

11、PHP中@的作用是什么?

在 PHP 中,@ 用于抑制错误消息。如果在以@ 符号开头的行上发生任何运行时错误,则该错误将由 PHP 处理。

12.解释解析器在PHP中的重要性?

PHP 解析器是将源代码转换为计算机可以理解的代码的软件。这意味着我们以 PHP 代码形式给出的任何指令集都会被解析器转换为机器可读的格式。

你可以使用 token_get_all() 函数使用 PHP 解析 PHP 代码。

13. PHP 中有哪些不同类型的数组?

PHP 中使用的数组主要有 3 种类型:

PHP面试题和答案合集:哪些问题最常见?
PHP 中的数组类型

索引数组

带有数字键的数组称为索引数组。值以线性顺序存储和访问。

PHP面试题和答案合集:哪些问题最常见?
索引数组

关联数组

带有用于索引元素的字符串的数组称为关联数组。元素值与键值关联存储,而不是以严格的线性索引顺序存储。

PHP面试题和答案合集:哪些问题最常见?
关联数组

多维数组

内部包含一个或多个数组的数组称为多维数组。使用多个索引访问这些值。

PHP面试题和答案合集:哪些问题最常见?
多维数组

14. 解释主要的错误类型。

PHP 中的 3 种主要错误类型是:

  • 注意:注意是脚本执行过程中可能发生的非严重错误。这些对用户不可见。示例:访问未定义的变量。
  • 警告:这些比通知更重要。警告不会中断脚本执行。默认情况下,这些对用户可见。示例:include() 一个不存在的文件。
  • 致命:这是最严重的错误类型,发生时会立即终止脚本的执行。示例:访问不存在的对象的属性或 require() 不存在的文件。

15.什么是特质(Traits)?

Traits 是一种机制,可让你在 PHP 和不支持多重继承的类似语言中创建可重用代码。不可能单独实例化它。

Traits旨在通过使开发人员能够在位于不同类层次结构中的许多独立类中自由重用方法集来减少单继承的限制。

16. JavaScript 是否与 PHP 交互?

JavaScript 是一种客户端编程语言,而 PHP 是一种服务器端脚本语言。PHP 具有生成 JavaScript 变量的能力,这可以在浏览器中轻松执行。从而可以使用简单的 URL 将变量传递给 PHP。

17. PHP常见面试题有哪些:'foreach' 循环在 PHP 中是如何工作的?

foreach语句是一个循环结构,它在PHP通过阵列数据类型用于迭代环。

foreach 的工作很简单,每次传递值时,元素都会被分配一个值,并且指针会递增。这个过程会重复进行,直到到达数组的末尾。

在 PHP 中使用 foreach 语句的语法如下:

foreach($array as $value)
{
   Code inside the loop;
}

18. PHP 中最常用的哈希密码方法是什么?

crypt() 函数用于此功能,因为它提供了大量可以使用的散列算法。这些算法包括 sha1、sha256 或 md5,它们的设计非常快速和高效。

19. include() 和 require() 函数有什么区别?

include() 函数

此函数用于将函数内调用的文件的所有内容以文本方式复制到调用它的文件中。

当找不到包含的文件时,它只会产生一个警告(E_WARNING)并且脚本会继续执行。

require()功能:

require() 函数的执行与 include() 函数相同。它还获取所需的文件并将整个代码复制到调用 require() 函数的文件中。

当找不到包含的文件时,会产生致命错误(E_COMPILE_ERROR)并终止脚本。

20. PHP面试题和答案合集:什么是cookie?如何在 PHP 中创建 cookie?

cookie 是服务器安装在客户端计算机上的小记录。它们在浏览器上存储有关用户的数据。它用于识别用户并在用户请求特定页面时嵌入在用户的计算机上。每次类似的 PC 请求带有程序的页面时,它也会发送 cookie。

在以加密形式验证用户身份后,cookie 维护后端生成的会话 id。它必须驻留在机器的浏览器中。你只能存储字符串值而不是对象,因为你无法跨网站或 Web 应用程序访问任何对象。

默认情况下,cookie 是特定于 URL 的。例如,雅虎不支持 Gmail cookie,反之亦然。默认情况下,cookies 是临时的和暂时的。每个站点可以在单个网站或 Web 应用程序中创建 20 个 cookie。50 字节是 cookie 的初始大小,4096 字节是 cookie 的最大大小。

在 PHP 中,我们可以使用 setcookie() 函数创建 cookie:

setcookie(name, value, expire, path, domain, secure, httponly);

这里 name 是必需的,其余参数是可选的。

示例:
setcookie(“instrument_selected”, “guitar”)

21. ASP.NET 和 PHP 有什么区别?

ASP.NET 和 PHP 之间的主要区别如下:

ASP.NETPHP
一个 Web 应用程序框架。一种服务器端脚本语言。
它专为在 Windows 上使用而设计。它是平台独立的
代码被编译和执行。解释的执行模式。
它具有与之相关的许可成本。PHP 是开源的并且可以免费使用。

22. 'escaping to PHP'是什么意思?

PHP 解析引擎需要一种方法来区分 PHP 代码和其他页面元素。实现这一点的机制被称为“转义到 PHP”。转义字符串意味着减少该字符串中使用的引号中的歧义。

例如,当你定义一个字符串时,你可以用双引号或单引号将其括起来:
“Hello, InterviewBit”。 

但是如果我在字符串中包含双引号呢?
“你好”InterviewBit。” 

现在我有歧义 - 解释器不知道我的字符串在哪里结束。如果我想保留双引号,我有多种选择。我可以在字符串周围使用单引号:
'Hello "InterviewBit."' 

或者我可以转义我的引号:
“你好\”InterviewBit.\”” 

任何以斜杠开头的引号都会被转义并被理解为字符串值的一部分。

23. 解释路径遍历

PHP面试题解析:路径遍历是一种读取Web 应用程序文件的攻击形式。'../' (dot-dot-sequences) 是一个跨平台的符号到目录上去。路径遍历就是利用这个符号来操作web应用文件。攻击者可以使用 Web 服务器或应用程序根目录之外的路径遍历来揭示被攻击文件的内容。通常这样做是为了访问存储在文件中的秘密密码、令牌和其他敏感信息。

路径遍历也称为“目录遍历”。它允许攻击者利用受攻击的 Web 文件中存在的漏洞。

我们举一个简单的例子。考虑我们有一个“显示文件”按钮可以打开一些 URL。

对于经典的目录遍历攻击,攻击者可能会尝试访问系统文件/etc/passwd(假设是UNIX/LINUX系统)。如果应用程序从 URL 接收文件参数的值并将其传递给系统调用,它将遍历从 /var/www 开始的相对路径 ../../etc/passwd 并要求系统加载密码文件。

这种技术也称为点-点-斜线攻击,因为它通常使用特殊字符 ../(或 Windows 上的 \..)爬到更高级别的目录。

24、final方法和final类是什么意思?

方法声明中的 final 关键字表示该方法不能被子类覆盖。声明为 final 的类不能被子类化。

这在我们创建像 String 类这样的不可变类时特别有用。只有类和方法可以声明为final,属性不能声明为final。

PHP 有经验的面试题

25.使用MySQL和PHP创建新数据库的步骤是什么?

用于在 PHP 中创建新 MySQL 数据库的 4 个主要步骤如下:

  • 使用 PHP 脚本建立到 MySQL 服务器的连接。
  • 连接已验证。如果连接成功,那么你可以编写一个示例查询来验证。
  • 创建数据库的查询是输入,然后存储到字符串变量中。
  • 然后,创建的查询将一个接一个地执行。

26. PHP 中 session_start() 和 session_destroy() 函数有什么用?

session_start() 函数用于启动新会话。此外,如果已停止,它可以恢复现有会话。在这种特殊情况下,如果恢复,将返回当前会话。

句法:

session_start();

session_destroy() 函数用于销毁所有会话变量,如下所示:

<?php
session_start();
session_destroy();
?>

27、PHP中的Memcache和Memcached是什么?是否可以在多个 PHP 项目之间共享 Memcache 的单个实例?

Memcached 是一种高效的缓存守护进程,专为减少动态 Web 应用程序中的数据库负载而设计。Memcache 为 Memcached 提供了一个方便的过程和面向对象的接口。

Memcache 是一种内存存储空间。我们可以在单个或多个服务器上运行 Memcache。因此,可以在多个项目之间共享单个 Memcache 实例。

可以将客户端配置为与一组单独的实例对话。因此,允许在同一主机上运行两个不同的 Memcache 进程。尽管运行在同一台主机上,但除非存在数据分区,否则这两个 Memcache 进程都保持独立。

28、PHP中处理MySQL的结果集有哪些不同的方式?

PHP中有4种处理MySQL结果集的方法。他们是:

  • mysqli_fetch_array():以关联数组、数值数组或两者的形式返回结果集的当前行。
  • mysqli_fetch_assoc():以关联数组的形式返回结果集的当前行。
  • mysqli_fetch_object():以对象的形式返回结果集的当前行。
  • mysqli_fetch_row():将结果行作为枚举数组返回。

29. PHP常见面试题有哪些:PHP 如何连接到一个 URL?

通过使用名为 cURL 的库,任何 URL 都可以轻松连接到 PHP。这是 PHP 标准安装的默认库。

术语 cURL 代表客户端 URL。cURL 使用 libcurl(客户端 URL 传输库),它支持许多协议,如 FTP、FTPS、HTTP/1、HTTP POST、HTTP PUT、HTTP 代理、HTTPS、IMAP、Kerberos 等。它允许你连接到 URL并从该页面检索和显示信息——如页面的 HTML 内容、HTTP 标头及其相关数据等。

使用 PHP cURL POST 连接 URL 的步骤如下:

  • 初始化 cURL 会话。
  • 定义你要发布请求的 URL。我们可以直接将此 URL 输入到 URL 部分 inset 选项参数中,也可以将其分配给一个对象。
  • 现在,定义要使用 post 选项执行的 cURL 选项。
  • 设置完所有功能后,就该执行我们的 cURL 了。
  • 在此之后,关闭 cURL 并回显你的对象以检查它们的响应。
//Step 1 To initialize curl
     $ch = curl_init();
//Step 2 To set url where you want to post
     $url = ‘http://www.localhost.com’;
//Step 3 Set curl functions which are needs to you
     curl_setopt($ch,CURLOPT_URL,$url);
     curl_setopt($ch,CURLOPT_POST,true);
     curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
     curl_setopt($ch,CURLOPT_POSTFIELD,’postv1 = value1&postv2 = value2’);
//Step 4 To execute the curl
     $result = curl_exec($ch);
//Step 5 Close curl
     curl_close($ch);

30.如何在PHP中创建API?

API 代表应用程序编程接口。它定义了函数和变量。数据库之间通过 PHP 扩展的通信由 API 处理。

现在,REST API 是一种 Web 架构,它使用 HTTP 协议在两个功能(即你的应用程序或系统)之间交换数据。现在,让我们通过考虑使用 PHP 脚本从数据库访问数据的示例来看看如何在 PHP 中创建 REST API。

步骤 1 - 创建数据库:要创建数据库,请运行以下查询:

CREATE DATABASE phptest;

第 2 步 - 创建表:创建数据库后,你必须创建一个包含虚拟数据的表。要创建表,请运行下面给出的查询:

CREATE TABLE IF NOT EXISTS `transactions` 
(
   `id` int(20) NOT NULL AUTO_INCREMENT,
   `order_id` int(50) NOT NULL,
   `amount` decimal(9,2) NOT NULL,
   `response_code` int(10) NOT NULL,
   `response_desc` varchar(50) NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `order_id` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

第 3 步 - 创建数据库连接:创建一个 db.php 文件并将下面给出的数据库连接粘贴到其中。确保使用你的数据库凭据更新这些凭据。

<?php
// Enter your Host, username, password, database below.
$con = mysqli_connect("localhost","root","","phptest");
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    die();
}
?>

第 4 步 - 创建 REST API 文件:创建一个 api.php 文件并将以下脚本复制到其中。

<?php
header("Content-Type:application/json");
if (isset($_GET['order_id']) && $_GET['order_id']!="") 
{
include('db.php');
$order_id = $_GET['order_id'];
$result = mysqli_query($con,
       "SELECT * FROM `transactions` WHERE order_id=$order_id");
if(mysqli_num_rows($result)>0)
       {
    $row = mysqli_fetch_array($result);
    $amount = $row['amount'];
           $response_code = $row['response_code'];
           $response_desc = $row['response_desc'];
    response($order_id, $amount, $response_code, $response_desc);
    mysqli_close($con);
}
       else
       {
     response(NULL, NULL, 200,"No Record Found");
}
}
else
{
response(NULL, NULL, 400,"Request is invalid");
}
function response($order_id,$amount,$response_code, $response_desc)
{
$response['order_id'] = $order_id;
$response['amount'] = $amount;
$response['response_code'] = $response_code;
       $response['response_desc'] = $response_desc;
$json_response = json_encode($response);
echo $json_response;
}
?>

上面的代码将接受 GET 请求并以 JSON 格式返回输出。

现在你可以获得如下输出:

PHP面试题和答案合集:哪些问题最常见?
输出文件

这是在 PHP 中创建 REST API 的方法。

31. PHP 中的 PDO 是什么?

PDO 代表 PHP 数据对象。PDO 是一组 PHP 扩展,提供核心 PDO 类和数据库、特定驱动程序。PDO 扩展可以访问为 PDO 驱动程序编写的任何数据库。有多种 PDO 驱动程序可用于 FreeTDS、Microsoft SQL Server、IBM DB2、Sybase、Oracle Call Interface、Firebird/Interbase 6 和 PostgreSQL 数据库等。

它提供了一个轻量级的、供应商中立的、数据访问抽象层。因此,无论我们使用什么数据库,发出查询和获取数据的功能都是一样的。并且,它侧重于数据访问抽象而不是数据库抽象。

32. GET 和 POST 的区别

GET 和 POST 的区别如下:

GETPOST
GET 方法用于从指定资源请求数据。POST 用于在与处理脚本的单独通信中将数据作为包发送到服务器。
数据以 URL 参数的形式发送,URL 参数是由与符号 (&) 分隔的名称-值对字符串通过 POST 方法发送的数据不会在 URL 中看到
GET 方法不能用于发送二进制数据,如图像或 Word 文档POST 方法可用于发送 ASCII 以及二进制数据,如图像和 Word 文档
如果你有任何敏感信息(如密码)要发送到服务器,则不得使用此方法。可以使用此方法发送敏感信息。
它可用于提交表单,用户可以在其中为结果添加书签。不能为通过 POST 表单提交的内容添加书签。
你只能对不安全的数据使用此方法。通过此方法发送的数据是安全的。
GET 方法并不安全,因为参数可能存储在 Web 服务器日志或浏览器历史记录中。POST 方法比 GET 更安全,因为参数不会存储在 Web 服务器日志或浏览器历史记录中。

33. 解释 PHP 中的类型提示

PHP面试题解析:在 PHP 中,类型提示用于为函数声明中的参数指定预期的数据类型(数组、对象、接口等)。它是在 PHP 5 中引入的。

无论何时调用该函数,PHP 都会检查参数是否为用户首选类型。如果参数不是指定的类型,运行时将显示错误并且程序不会执行。

它有助于更​​好地组织代码和改进错误消息。

用法示例:

//sendEmail() function argument $email is type hinted of Email Class. It means to call this function you must have to pass an email object otherwise an error is generated.
<?php
    function sendEmail (Email $email)
    {
      $email->send();
    }
?>

34. PHP常见面试题有哪些:如何在 PHP 中终止脚本的执行?

为了在 PHP 中终止脚本的执行,使用了 exit() 函数。它是一个内置函数,输出一条消息,然后终止当前脚本。

你想要显示的消息作为参数传递给 exit() 函数。显示消息后,此函数将终止脚本。它是 die() 函数的别名。它不返回任何值。

语法:退出(消息)

其中消息是作为参数传递的参数。它定义了消息或状态。

示例:下面给出的代码将打印一条消息并退出当前脚本。

<?php
$site = "https://www.interviewbit.com//";
fopen($site,"r")
or exit("Unable to connect to $site");
?>

PHP面试题和答案合集结论

PHP 被证明是编写动态网页的绝佳工具。它不限于专业 Web 开发人员使用。非技术用户也可以轻松学习一些方便的技巧,使他们的网页更易于管理,从而使它们更有用。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: