Laravel 10访问器未声明:Attribute返回类型时失效的原因咨询
Laravel 10访问器未声明返回类型失效的原因
这是Laravel 10对新型Attribute访问器的识别逻辑导致的,和PHP严格类型模式无关:
- Laravel 10引入的基于
Attribute类的访问器/修改器,不再依赖旧版get{Attribute}Attribute的命名规则,而是靠方法的返回类型声明来识别。 - 框架内部会检查方法的返回类型提示:只有当方法明确标注返回
Attribute类时,Laravel才会将其注册为对应属性的访问器;如果没加这个返回类型,框架会直接忽略该方法,不会把它和模型属性关联起来。 - 旧版访问器不需要返回类型是因为靠命名规则识别,但新型Attribute访问器的识别逻辑完全不同,这是Laravel框架层面的硬性规则,和PHP是否开启严格类型无关。
举个对比例子:
旧版命名规则访问器(无需返回类型):
protected function getIsPublishedAttribute($value) { return $value ? 'yes' : 'no'; }
新型Attribute访问器(必须声明返回类型):
protected function isPublished(): Attribute { return Attribute::make( get: fn($value) => $value ? 'yes' : 'no', ); }
内容的提问来源于stack exchange,提问作者Hasan Aftab
相关产品推荐
相关产品推荐

