Carbon静态宏中self::this()不被PHPStan识别,求正确PHPDoc注解?
解决PHPStan对Carbon静态宏闭包中
self指向错误的PHPDoc注解方案 在Laravel的AppServiceProvider中注册Carbon宏时,使用官方推荐的静态闭包+self::this()写法:
Carbon::macro('customMethod', static function () { return self::this()->addDays(7); });
PHPStan会错误判定闭包内的self指向AppServiceProvider,从而抛出“调用未定义静态方法”的提示。
要在遵循官方规范的前提下解决这个问题,只需给静态闭包添加@self(或@phpstan-self)PHPDoc注解,明确指定self的指向类型:
正确写法示例
Carbon::macro('customMethod', /** @self \Carbon\Carbon */ static function () { return self::this()->addDays(7); });
注解说明
@self注解会告知PHPStan,当前闭包上下文里的self指代\Carbon\Carbon类,而非所在的AppServiceProvider,以此修正类型推断错误,同时保留官方推荐的静态闭包写法。
如果更倾向于使用PHPStan专属注解,也可以替换为@phpstan-self,效果完全一致:
Carbon::macro('customMethod', /** @phpstan-self \Carbon\Carbon */ static function () { return self::this()->addDays(7); });
内容的提问来源于stack exchange,提问作者madbob
相关产品推荐
相关产品推荐

