Hello Internals,

I'm going to try something new. I've been working on another RFC called "Typed 
Aliases" (https://wiki.php.net/rfc/typed-aliases). It is very much a draft and 
in-flux, and I've already worked out the technical mechanics of it ... however, 
I am very unhappy with the syntax, and while I have a few ideas about that; I 
assume this list will be much better at it than me. So, please bring your 
brushes and paint; I brought a bikeshed.

If you haven't read it already, here's the TL;DR:

- This RFC expands the "use ... as ..." syntax to allow any type expression on 
the left side. These aliases are PER FILE and expire once the file is compiled.

- This RFC also adds the ability for an alias to survive a file (currently 
using the "as alias" syntax that I don't like) which actually just creates a 
special kind of class. When this special class is encountered during 
type-checking, the alias is expanded and checked. It also allows this via a 
"type_alias()" function instead of the "use ... as alias ..." syntax.

How it works:

use string as alias MyString

gets virtually compiled into a special class that would look something like 
this to ReflectionClass (as it is currently):

class MyString extends PrimitiveAlias { 
  const PrimitiveType aliasOf = PrimitiveType::string;
}

- Reflection is a bit weird here, and I'm not exactly happy with it; but I'm 
curious what the list thinks. I'm open to virtually anything that makes sense 
here; including not allowing ReflectionClass on the type aliases at all.

- Since these are "technically" classes, I went with just "use"-ing them like 
normal classes. Originally, I had something different: "use alias ..." (like 
"use function ...") to make it more clear. I will probably go back to this, but 
I'm curious what others think.

I'm going to take a step back and listen/answer questions. But please, grab a 
brush and paint.

— Rob

Reply via email to