面试题 / PHP

PHP面向对象与内置能力

PHP 中常见的魔术方法有哪些?

常见魔术方法包括:

  • __construct()
  • __destruct()
  • __get()
  • __set()
  • __isset()
  • __unset()
  • __call()
  • __callStatic()
  • __toString()
  • __invoke()
  • __sleep()
  • __wakeup()
  • __clone()

PHP 5 的构造函数和析构函数怎么写?

class Demo {
    public function __construct() {}
    public function __destruct() {}
}

PHP 5 的权限控制修饰符有哪些?

  • public
  • protected
  • private

它们用于控制属性和方法的可见范围。

如何声明类、实例化对象以及访问类属性?

class MyClass {
    public $name = 'php';
}

$obj = new MyClass();
echo $obj->name;
$obj->name = 'bat';

autoload 的机制是什么?

当代码使用某个尚未加载的类时,PHP 会尝试触发自动加载机制。

常见方式:

  • spl_autoload_register()
  • Composer 自动加载

核心思想是:

  1. 根据类名推导文件路径。
  2. 自动 require 对应文件。
  3. 避免手动到处 include/require

PHP 的协程是什么?有什么用途?

协程可以理解为用户态的轻量级执行单元,切换成本比线程低很多。

常见用途:

  • 高并发网络请求
  • 异步 I/O
  • 降低阻塞等待带来的线程资源浪费

在 PHP 里常见于:

  • Swoole
  • OpenSwoole
  • Fibers(PHP 8.1+)

如何获取指定文件夹下的所有文件?

常见方法至少有两类:

  1. scandir() 递归遍历。
  2. opendir() / readdir() 遍历目录。

如果要写得更现代一些,还可以用 SPL 迭代器。

mysql_fetch_row()mysql_fetch_array() 有什么区别?

旧版扩展里:

  • mysql_fetch_row() 返回纯数字索引数组。
  • mysql_fetch_array() 可以返回数字索引、关联索引或两者都有。

不过这些旧 API 已废弃,现代项目中通常使用 mysqliPDO

请谈谈你对 MVC 的理解。

MVC 是一种分层思想:

  • Model:处理数据和业务逻辑。
  • View:负责页面展示。
  • Controller:协调请求、调度模型与视图。

核心价值是关注点分离,便于维护和扩展。


来源引用