面试题 / PHP

PHP基础语法与常识

表单中 GET 与 POST 提交方法的区别是什么?

  • GET 通过 URL 参数传递数据。
  • POST 通过请求体传递数据。
  • GET 更适合查询类请求。
  • POST 更适合提交较大或敏感数据。

如何用 PHP 打印前一天的时间?

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

echo()print()print_r() 的区别是什么?

  • echoprint 都是语言结构,不是普通函数。
  • print(string $arg) 通常只输出一个参数。
  • echo 可以输出一个或多个字符串。
  • print_r 可以打印数组、对象等结构化内容。

includerequire 的区别是什么?如何避免重复包含?

  • include 失败通常只产生警告。
  • require 失败会直接中断执行。
  • 避免重复包含可以使用:
    • include_once
    • require_once

PHP 中传值与传引用有什么区别?

  • 传值:函数内部修改不影响外部变量。
  • 传引用:函数内部修改会影响原变量。

如果使用引用参数,需要在形参前加 &

如何实现字符串翻转?

最直接的写法:

echo strrev($str);

如果是中文字符串,不能直接用 strrev(),需要按字符而不是按字节处理。

如何实现中文字符串截取且不乱码?

推荐优先使用多字节函数:

echo mb_substr($str, 0, 10, 'UTF-8');

现代项目里一般不建议再自己按字节手工拆分。

如何从一个标准 URL 中高效取出文件扩展名?

推荐先拿路径,再取扩展名:

$path = parse_url($url, PHP_URL_PATH);
$ext = pathinfo($path, PATHINFO_EXTENSION);

截取文件名后缀有哪些方法?

至少可以说这几种:

  1. pathinfo($filename, PATHINFO_EXTENSION)
  2. strrchr($filename, '.')
  3. explode('.', $filename) 后取最后一段

其中最推荐的是:

$ext = pathinfo($filename, PATHINFO_EXTENSION);

empty()isset() 的区别是什么?

  • isset():判断变量是否存在且不为 NULL
  • empty():判断变量是否为空值

例如:

  • 变量为 0empty()trueisset()true
  • 变量未定义:empty()trueisset()false

如何判断变量是否已设置、是否为空?

常见组合方式是:

  • 先用 isset() 判断是否存在
  • 再用 empty() 判断是否为空值

这是 PHP 面试里的高频基础题。

===== 的区别是什么?

  • ==:只比较值,会发生类型转换。
  • ===:同时比较值和类型。

业务代码里通常更推荐优先使用 ===

'$var'"$var" 的区别是什么?

  • 单引号字符串不会解析变量。
  • 双引号字符串会解析变量和部分转义字符。

例如:

$var = 'php';
echo '$var';  // 输出 $var
echo "$var";  // 输出 php

@foo()foo() 的区别是什么?

@ 是错误控制运算符。

  • foo():报错会正常输出。
  • @foo():会抑制该表达式产生的错误提示。

forforeach 哪个更快?

这类问题不能脱离具体场景绝对判断,但在数组遍历场景里,foreach 通常更常用、也更适合表达语义。

更稳妥的说法是:

  • 不要只背“谁更快”,要结合数据结构、访问方式和实际压测结果来判断。
  • 在 PHP 业务代码里,foreach 往往可读性更好。

PHP 中 heredoc 的结束标志有什么要求?

  • 必须单独占一行。
  • 结束标识前后不能有多余空格和字符。
  • 结尾通常以分号结束。

error_reporting() 有什么作用?

用于设置 PHP 错误报告级别,决定哪些错误、警告、提示会被报告出来。

例如:

error_reporting(E_ALL);

如何验证电子邮箱格式是否正确?

推荐直接使用过滤器:

filter_var($email, FILTER_VALIDATE_EMAIL)

如何获取当前执行脚本路径和参数?

常见变量包括:

  • $_SERVER['PHP_SELF']
  • $_SERVER['REQUEST_URI']
  • $_SERVER['QUERY_STRING']
  • $_GET

如果要拿完整 URL,通常还需要结合 HTTP_HOST 和协议判断。

下面哪项没有将 john 添加到 users 数组中?

(a) $users[] = 'john';
(b) array_add($users, 'john');
(c) array_push($users, 'john');
(d) $users ||= 'john';

正确答案是 bd

  • PHP 中没有 array_add 这个内置函数。
  • d 不是合法的 PHP 数组追加写法。

来源引用