Re: [Initial Feedback] Typed Arrays

From: Date: Wed, 26 Jun 2024 21:23:40 +0000
Subject: Re: [Initial Feedback] Typed Arrays
References: 1 2  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message


On Wed, Jun 26, 2024, at 22:56, Casper Langemeijer wrote:
> 
> On Wed, Jun 26, 2024, at 21:59, Richard Miles wrote:
>>  I think we should have typed arrays in PHP. 
> 
> Yes! I cannot stand sitting through conference talks on 'generics' that only talk
> about 'collections'. This could be solved if we had typed arrays. If anything we would get
> better talks on Generics. :-)
> 
> Arrays of a type is one of the last cases where I need docblocks to tell my editor about the
> types.
> 
> In my opinion, even if we would have some implementation of generics, having typed arrays with
> a simple syntax would be awesome.
> 
> A syntax suggestion:
> 
> $array = stdClass[];
> class A {
>   public stdClass[] $array;
> }
> 
> Adding an invalid array member should throw TypeError.
> 
> I know there are way more edge-case situations to think of (for example: if class B extends A,
> $b is of type B[], but holds only A's, can $b be assigned as value of public A[] $a ?)
> 
>>  Generics or bust.
> 
> I do not understand the reasoning behind that. Is it because we really want generics, but when
> the 95% use-case is solved we fear that there would not be enough momentum to get that? I'd
> love to have generics too, but a very simple array syntax would in my opinion still add a lot of
> value, even if we already had generics.
> 

You actually just gave me an evil idea on how to get generics in userland… unfortunately it is bed
time as I have an early train to catch in the morning. I will stew on it, but here is the gist:

Create a class that generates a typed collection when accessed via array, such that (new
InternalTypedArray)['int'] produces a class that acts like an array but only accepts ints.

Using the composer file loading key, load a file that contains:

define('TypedArray', new InternalTypedArray);

You can now use $arr = TypedArray['MyType']

Could be interesting and I wouldn’t be surprised if it hasn’t been done before. 

— Rob


Thread (39 messages)

« previous php.internals (#123897) next »