发布于2026-07-02 阅读(0)
扫一扫,手机访问
interface Animal,再搞两个实现类,最后把它们塞进同一个函数里调用出来,多态才算真落地。

interface**。PHP 不支持多继承,但一个类可以 implements 多个接口,这更贴近真实项目中行为解耦的需求——比如一个支付类既要 Pays 又要 Logs。
来,我们看看常见的坑:
$name)塞进接口里 → 接口不能有属性,一写就会报 Fatal error: Interfaces may not include member variablesTypeError)public function calculate(): float;function process(Processor $p),而不是具体类名if ($obj instanceof Dog) 或 switch (get_class($obj)),那多态还没真正落地。PHP 多态的价值就在于——把这些判断删掉之后代码照样能跑,而且更清晰。
使用场景:
FileLogger、SlackLogger、NullLogger,但统一传给 log(Message $m)Exporter 接口,上层代码完全无感Shape,子类可返回 Circle(需开启严格模式)Animal,子类重写时可用 Mammal(更具体的类型)array 或 mixed,会绕过多态约束,失去编译期检查__construct() 中直接 new 子类实例,导致无法被替换(测试时难 mock,线上难切换策略)new PaymentProcessor('alipay') → 应该由外部注入具体实现__construct(Config $c),子类却写成 __construct(string $key))final 类/方法有优化,但如果你把关键多态入口标为 final,就等于关掉了扩展路径Dog 还是 Cat,得靠工厂、容器或配置驱动——那是另一层设计,别指望多态自己帮你做决策。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8