将重写方法的PHP Docblock替换为@inheritDoc是否为最佳实践?
解决PHP子类重写方法重复Docblock的问题
哈哈,这种重复写Docblock的痛苦我太懂了——子类重写父类方法时一字不差抄父类的注释,不仅费时间,哪天父类注释改了子类还容易漏更,太闹心!给你推荐一个PHP文档规范里的绝佳解决方案:@inheritDoc标签。
核心方案:使用@inheritDoc继承父类Docblock
你完全不用在子类重写方法里重复写父类的参数、返回值等注释,只需要在子类方法的Docblock里写上@inheritDoc,文档生成工具(比如phpDocumentor)和主流IDE都会自动继承父类对应方法的完整Docblock内容。
示例改造
原来的子类代码:
MyChildClass extends MyBaseClass { /** * @param string $first - first name * @param string $last - last name */ protected function MyMethod($first, $last) { } }
改成这样就搞定了:
MyChildClass extends MyBaseClass { /** * @inheritDoc */ protected function MyMethod($first, $last) { // 你的子类实现逻辑 } }
进阶:补充子类专属注释
如果子类方法有额外的逻辑或需要补充说明,还可以在@inheritDoc后面添加自己的注释,文档工具会自动把父类注释和子类补充的内容合并:
MyChildClass extends MyBaseClass { /** * @inheritDoc * 子类额外说明:此实现会对传入的姓名做首字母大写处理 */ protected function MyMethod($first, $last) { $first = ucfirst($first); $last = ucfirst($last); parent::MyMethod($first, $last); } }
注意事项
- 主流IDE(PhpStorm、VS Code配合PHP插件)都能识别
@inheritDoc,代码提示时会显示父类的完整Docblock内容,不影响开发体验。 - 前提是父类的Docblock要规范完整,这样子类继承的注释才准确有用。
这种方式不仅能大幅减少重复代码,还能保证父类和子类注释的一致性,绝对是处理这类场景的最佳实践!
内容的提问来源于stack exchange,提问作者Nicolaas Thiemen Francken
相关产品推荐
相关产品推荐

