final 关键字用于禁止类继承或方法重写,提升可维护性与安全性;不可修饰属性和常量;体现开闭原则与里氏替换原则的设计约束。

final 关键字用于禁止继承或重写,是 PHP 中实现类结构约束的重要机制。它不改变功能逻辑,但能明确设计意图、提升代码可维护性与安全性——这正是面试官想考察你是否理解“封装”和“契约”的实际落地方式。
final 修饰类:禁止被继承
一旦用 final 声明一个类,任何其他类都不能通过 extends 继承它。
- 常见于工具类、核心基础类(如 DateTimeImmutable)、或明确不希望被扩展的领域模型
- 避免子类破坏父类不变量(例如:某个类内部强依赖单例模式或特定初始化流程)
- PHP 解析时会直接报错:Fatal error: Class X may not inherit from final class
final 修饰方法:禁止被子类重写
在类中将某个方法声明为 final,表示该方法逻辑必须保持原样,子类不可覆盖。
酷纬企业网站管理系统Kuwebs是酷纬信息开发的为企业网站提供解决方案而开发的营销型网站系统。在线留言模块、常见问题模块、友情链接模块。前台采用DIV+CSS,遵循SEO标准。 1.支持中文、英文两种版本,后台可以在不同的环境下编辑中英文。 3.程序和界面分离,提供通用的PHP标准语法字段供前台调用,可以为不同的页面设置不同的风格。 5.支持google地图生成、自定义标题、自定义关键词、自定义描
- 常用于模板方法模式中的骨架方法(比如 execute() 调用一系列 final 的步骤,只允许子类定制非 final 的钩子方法)
- 保护关键业务逻辑不被意外篡改(如支付校验、权限检查等入口方法)
- 注意:final 方法仍可被调用,只是不能被 override;private 方法天然不可重写,但语义不同(访问权限限制 ≠ 设计约束)
final 不能修饰属性和常量
PHP 不允许对属性($prop)或类常量(const NAME)使用 final。若想限制修改,应结合 private/protected + 只读逻辑(PHP 8.1+ 支持 readonly 属性)。
立即学习“PHP免费学习笔记(深入)”;
- 错误写法:final public $value = 1; → 语法错误
- 替代思路:用 private 属性 + public getter,或 readonly 属性(PHP 8.1+)
- 类常量本身不可变,无需 final;接口常量也默认不可覆盖
面试加分点:和设计原则的联系
final 不是“锁死代码”,而是显式表达设计决策:
- 体现 开闭原则(OCP) 的另一面:对修改关闭,对扩展开放——但某些模块就是不该被扩展
- 配合 里氏替换原则(LSP):当父类行为强约束时,用 final 防止子类违背契约
- 性能上无实质优化(PHP 不因 final 做内联优化),但能减少运行时类型推断负担










