已安装MongoDB PHP扩展还需装对应PHP库吗?相关概念及工具差异问询
问题1:MongoDB PHP扩展与对应PHP库的区别
- 你通过pecl安装的是MongoDB PHP扩展,属于C语言编写的PHP原生底层组件,核心职责是处理和MongoDB服务端的网络通信、BSON数据格式编解码,你用到的
MongoDB\BSON\*、MongoDB\Driver\*开头的类,全部都是扩展直接提供的底层接口。 - 需要用composer安装的
mongodb/mongodb是纯PHP实现的上层封装库,完全基于扩展的底层接口做二次封装,目标是降低开发门槛,提供更贴合日常开发习惯的高层API。
问题2:未安装PHP库仍可正常使用的原因及弊端
- 你可以正常使用相关功能是因为你当前调用的都是扩展本身提供的原生底层接口,本来就不需要依赖上层封装库就可以直接运行,完全符合官方的设计逻辑。
- 不安装上层库的实际弊端非常明确:
- 所有操作都需要手动编写底层逻辑,比如批量写入、查询结果解析都要自行处理
BulkWrite、Query这类底层类的逻辑,代码冗余度高,开发效率低。 - 没有封装好的高层特性,比如模型映射、事务便捷调用、查询构造器、错误重试逻辑等都需要自己实现,很容易写出有隐患的代码。
- 官方后续的易用性迭代大部分都会优先放在上层库,底层扩展只会保留最核心的通信和编解码能力,新功能的使用成本会越来越高。
- 所有操作都需要手动编写底层逻辑,比如批量写入、查询结果解析都要自行处理
问题3:pecl与composer的定位差异
- pecl是PHP的原生扩展仓库,管理的都是C语言编写、需要编译安装到PHP运行时的扩展,属于全局的PHP运行时依赖,安装后需要在
php.ini中启用,同一个PHP环境下的所有项目共享同一个扩展版本。 - composer是PHP的项目级依赖管理工具,管理的都是纯PHP编写的用户态代码包,安装后会放在当前项目的
vendor目录下,只对当前项目生效,不同项目可以安装同一代码包的不同版本,互相不会影响,也不需要修改PHP全局配置。
内容的提问来源于stack exchange,提问作者user2402616
相关产品推荐
相关产品推荐

