Hello internals,

I've had this little library for a while 
(https://github.com/withinboredom/time), mostly as a place to experiment with 
the quirks of PHP and take it in weird places. Anyway, I've been experimenting 
with "strongly typed time" in attributes for a while now. At this point, it's a 
little weird but doable to use something like this:

#[MyAttribute(units: StandardSecond, amount: 5)]

... which is less than ideal. What I would really like is this:

#[MyAttribute(5 * StandardSecond)]

PHP doesn't support operator overloading, which, from the last RFC attempt, 
probably won't for quite a long time. Thus, I started experimenting with 
extending the \GMP class, which is perfectly allowed since it isn't final. For 
those that don't know, GMP implements operator overloading such that a GMP 
number times an int results in a new GMP number.

Surprisingly, I can get this to work, but I end up with a GMP number -- with 
the right value -- but not the right type. Hence this email. In essence, I am 
attempting to "back-door" my way into having operator overloading.

I would like to add static protected methods to the GMP class that are called 
for operations. In the event all objects are base-GMP objects, no behavior will 
change.

So, here are my questions:

- for built-in extensions, does this need an RFC?
- does anyone have any strong opinions against having the ability to have 
actual, typed units in PHP?
- should we revisit operator overloading instead of me hacking my way into it?
- should we revisit "constant expressions" in attributes?

— Rob

Reply via email to