上一篇
各位PHPer注意啦!随着PHP 8.4的测试版发布,抽象类的功能又有了新变化✨,不过无论版本如何迭代,接口(Interface)和抽象类(Abstract Class) 这对"好基友"始终是面试必考题,今天咱们就用最接地气的方式,掰开揉碎讲清楚它们的区别!
abstract
标记) // 抽象类示例:能同时包含实现和抽象方法 abstract class Animal { abstract public function eat(); // 必须实现 public function sleep() { echo "Zzz..."; } // 直接继承 } // 接口示例:全是未实现的方法 interface Flyable { public function takeOff(); public function land(); }
extends
继承,PHP是单继承(一个子类只能继承一个抽象类) class Bird extends Animal {...} // ✅ 正确 class Bird extends Animal, Plant {...} // ❌ 报错!
implements
实现,支持多实现(一个类可实现多个接口) class Airplane implements Flyable, Machine {...} // ✅ 双接口
abstract
标记的方法必须由子类实现 default
关键字) abstract class Logger { protected string $logPath; // ✅ 具体属性 abstract static public string $level; // ✅ 抽象属性 }
const
) parent::__construct()
调用 abstract class Vehicle { public function __construct(public string $model) {} } class Car extends Vehicle { public function __construct(string $model) { parent::__construct($model); // ✅ 调用父构造 } }
public/protected/private
private
(不然子类咋实现?) public
(PHP 8.2+允许显式声明) protected/private
会报错 🐶 例子:
Dog extends Animal
(狗是一种动物)
✈️ 例子:
Airplane implements Flyable
(飞机具备飞行能力)
Loggable
、Serializable
) 据2025年7月测试版消息,抽象类将支持:
"抽象类像爹,能遗传财产也能立规矩;
接口像合同,只管签字必须守约定"
下次面试官再问这个问题,直接甩出这个对比表👇
特性 | 抽象类 | 接口 |
---|---|---|
继承方式 | extends(单继承) | implements(多实现) |
方法实现 | 可具体可抽象 | 全抽象(PHP8+可默认) |
成员变量 | 支持属性和常量 | 仅常量 |
构造函数 | 支持 | 不支持 |
访问控制 | 全可见性 | 仅public |
设计目的 | 代码复用 | 行为约定 |
掌握这些,保证让面试官眼前一亮!🎯
本文由 梁香雪 于2025-07-31发表在【云服务器提供商】,文中图片由(梁香雪)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/489597.html
发表评论