php是多范式语言,支持oop与函数式风格但不原生支持纯函数式编程;oop聚焦“谁做事”,封装数据与行为,依赖状态;函数式聚焦“做什么”,强调纯函数、不可变数据与无副作用计算。

PHP 中面向对象编程(OOP)和函数式编程(FP)不是互斥的两种“模式”,而是不同设计思想的体现;PHP 本身是多范式语言,支持 OOP,也允许函数式风格写法,但不原生支持纯函数式编程(如不可变数据、尾递归优化、代数数据类型等)。关键区别在于组织逻辑的方式、状态处理、复用机制和思维重心。
核心关注点不同
OOP 关注谁在做事:把数据(属性)和行为(方法)封装进类,通过对象交互建模现实或业务实体。例如:User 类有 $name 属性和 login() 方法,强调身份与职责。
函数式关注做什么、怎么算:把计算抽象为纯函数(无副作用、相同输入恒得相同输出),数据尽量不可变,操作靠组合小函数完成。例如:array_map('strtoupper', $names) 不修改原数组,只返回新结果。
状态与副作用处理方式不同
- OOP 允许并常依赖状态:对象内部可维护私有属性,方法调用可能改变其状态(如
$user->incrementLoginCount()) - 函数式倾向避免可变状态:推荐用新值替代旧值(如用
array_merge($old, $new)而非直接改$old),副作用(如 I/O、修改全局变量)被显式隔离或推迟
代码复用与组合逻辑不同
- OOP 复用靠继承(
extends)、接口实现(implements)、组合(成员对象)和多态(同一方法不同表现) - 函数式复用靠高阶函数(如
array_filter()接回调)、闭包、函数组合(如用pipe()或手动嵌套fn($x) => f(g(h($x))))
PHP 实际使用中的典型对比
假设要处理一组用户数据并筛选活跃用户:
citySHOP是一款集CMS、网店、商品、分类信息、论坛等为一体的城市多用户商城系统,已完美整合目前流行的Discuz! 6.0论坛,采用最新的5.0版PHP+MYSQL技术。面向对象的数据库连接机制,缓存及80%静态化处理,使它能最大程度减轻服务器负担,为您节约建设成本。多级店铺区分及联盟商户地图标注,实体店与虚拟完美结合。个性化的店铺系统,会员后台一体化管理。后台登陆初始网站密匙:LOVES
立即学习“PHP免费学习笔记(深入)”;
OOP 风格:
class UserRepository {
private array $users;
public function __construct(array $users) { $this->users = $users; }
public function getActiveUsers(): array {
return array_filter($this->users, fn($u) => $u['last_login'] > strtotime('-30 days'));
}
}
函数式风格(更倾向):
$isActive = fn($user) => $user['last_login'] > strtotime('-30 days');
$activeUsers = array_filter($users, $isActive);
注意:PHP 的 array_* 系列函数、匿名函数、fn 箭头函数都是函数式友好特性,但语言层不强制纯函数——开发者仍需自觉避免副作用、慎用引用传参或全局变量。










