You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 8.0中是否支持将annotations注解与attributes属性结合使用

结论

完全可以,这种混合写法是合法且能正常运行的。

原理说明

PHP 8.0 引入原生属性(Attribute)语法后,传统的 DocBlock 注解(Annotation)和原生属性是两套独立的解析逻辑,互不干扰:

  • 传统注解的解析器只会读取DocBlock注释块内对应格式的标记,不会识别PHP原生的#[...]属性语法
  • 原生属性的解析器只会读取#[...]包裹的内容,不会处理注释块里的内容

你给出的示例里,@Gedmo\Timestampable是gedmo/doctrine-extensions库提供的传统注解,#[ORM\Column]是Doctrine ORM 2.9及以上版本支持的原生属性,二者分别由各自的扩展解析,完全不会冲突。

补充说明

如果后续你想要统一语法的话,只要你使用的gedmo/doctrine-extensions版本不低于v3.5,也可以直接把二者都写成原生属性形式:

#[Gedmo\Timestampable(on: 'create')]
#[ORM\Column(type: 'datetime')]
private ?DateTime $createdAt;

// 也可以合并成一行书写
#[Gedmo\Timestampable(on: 'create'), ORM\Column(type: 'datetime')]
private ?DateTime $createdAt;

不过即使不做修改,你原本的混合写法也可以正常工作,不需要额外调整。

内容的提问来源于stack exchange,提问作者M. Mustafa Eyvaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:45:01