PHP构造函数传递对象参数:属于依赖注入还是多态?
问题解答
这属于依赖注入(构造函数注入),并非多态,具体解释如下:
核心逻辑拆解
你的代码里:
$speed = new Speed(1.5);实例化了一个Speed类的对象- 将这个
Speed对象作为参数传入Car的构造函数,本质是把Car类依赖的Speed对象从外部注入进去,而非让Car类自己内部创建Speed实例。
为什么是依赖注入
依赖注入的核心就是解耦类与它的依赖:
- 如果
Car内部自己写$speed = new Speed(1.5),那Car就和Speed强绑定了,以后要更换Speed的实现(比如换成带限速功能的LimitedSpeed),必须修改Car的代码 - 用构造函数传入
$speed后,只要新的类符合Speed的接口规范,直接传新实例就能让Car正常工作,完全不用改动Car的内部逻辑
为什么不是多态
多态的核心是同一接口下不同实现的替换:比如Speed有子类FastSpeed,Car的构造函数声明接收Speed类型参数,此时不管传Speed还是FastSpeed实例,Car都能调用相同的方法(比如getVelocity()),这才是多态的体现。你当前的代码只是传递依赖对象,和多态没有直接关联。
更精准的搜索方向
如果要深入研究,建议搜索「PHP 构造函数依赖注入」或者「PHP 依赖注入实践」,这些关键词能帮你找到更针对性的资料。
内容的提问来源于stack exchange,提问作者now_m
相关产品推荐
相关产品推荐

