1--TEST-- 2static type in trait 3--FILE-- 4<?php 5 6trait T { 7 public function test($arg): static { 8 return $arg; 9 } 10} 11 12class C { 13 use T; 14} 15class P extends C { 16} 17 18$c = new C; 19$p = new P; 20var_dump($c->test($c)); 21var_dump($c->test($p)); 22var_dump($p->test($p)); 23var_dump($p->test($c)); 24 25?> 26--EXPECTF-- 27object(C)#1 (0) { 28} 29object(P)#2 (0) { 30} 31object(P)#2 (0) { 32} 33 34Fatal error: Uncaught TypeError: C::test(): Return value must be of type P, C returned in %s:%d 35Stack trace: 36#0 %s(%d): C->test(Object(C)) 37#1 {main} 38 thrown in %s on line %d 39