On Tue, Dec 2, 2025, at 4:23 PM, Rob Landers wrote: > Hello Internals, > > I’d like to request your comments on type aliases (not to be confused > with typedefs) at https://wiki.php.net/rfc/typed-aliases > > TL;DR (it’s actually rather short): > > Following the same syntax as other use'ing statements, you can alias a type: > > use type int|float as Number; > > function sum(Number $a, Number $b): Number { return $a + $b; } > > You can also include types, with some restrictions: > > include types 'math-types.php'; > > function sum(Number $a, Number $b): Number { return $a + $b; } > > These are compile-time replacements that serve to make code more > readable and reduce repetition with no runtime overhead. Type aliases > follow the same scoping rules as other use imports. > > — Rob
Thanks, Rob! This does seem like a good low-hanging fruit piece to attack. Most importantly, I don't see anything here that would preclude more formal TypeDef structures in the future. A few other notes: - Should `mixed` be allowed as in an alias definition? Since `mixed` matches anything, it would render the entire alias redundant as it's then equivalent to `mixed`. - What if any conflict resolution is there if you include two different type files that declare the same alias? - Because it's all compile time, I assume two aliases with the same source but different names become compatible? Eg: use type string|Stringable as Stringy; use type string|Stringable as Stringish; Those are mutually compatible in practice, yes? - Are aliases case sensitive? You're using Capitalized names in the RFC, but I don't know if that means anything... (Please state in the RFC.) - The "include type" syntax implies that it would not be possible to pre-load aliases via Composer autoload or opcache preloading. (Well, maybe the latter.) That feels like an unnecessary limitation, and is my main issue with the current design. Some way to have project-wide or package-wide definitions would be very helpful, without needing a manual include statement in every file. - Does it matter where the `include type` statement goes? Must it be at the top under the `use` statements, or could it be anywhere? - Not allowing `use` statements in type include files: This feels like a very unfortunate limitation. Is there any way to obviate that? It's all compile time, as you said... Overall, I am tentatively in favor. --Larry Garfield
