> We've done some initial work related to this as part of PHP Foundation work:
> <https://github.com/derickr/php-src/tree/collections/Zend/tests/collection>

After reviewing the PR I don't think this accurately captures what we're 
attempting to do/discuss. 
Are there other branches you could share? You’ve posed a lot of new syntax. I 
have questions.

collection(Dict) Articles<string => Article> {}

The code above is limiting compared to the posed syntax in this thread. Since 
your just working on providing a specific datatype with a custom syntax. What 
am I supposed to be able todo inside the {}? Why not? 

collection(Dict<Article>) Articles {}

or just 

Dict<Article> Articles {}
Seq<Article> Articles {}

and then there's the completely new syntax? Am I supposed to be able to add 
methods in this block?

class Articles extends Dict<Article> {}

If I'm not then it should read more like the following:

$a = (Dict<Article>) [];

____________________________________________________________

But this all feels off-topic. Because, we need to get Typed Array syntax! 


interface iArrayA ['a' => string ]
interface iArrayB implements iArrayA ['b' => string, 'c' => ?string ]


 $array = iArrayA [
        ‘a’ => ‘hello'
];
// reads the same as a typecast
 $array = (iArrayA &| iArrayB) [
        ‘a’ => ‘hello'
];

// It’s essentially like a typecast, which should probably be allowed. If the 
set of possible values needs to increase, a typecast would do it. 

class A {
  public iArrayB $array = [ 
                ‘a’ => ‘hello’,
                ‘b’ => ‘world'
        ]; 
}

If generics and the is operator get passed then one could in theory do.

class A <T is iArrayA>{
        public T $array = [ 
                ‘a’ => ‘hello’
        ]; 
}

$a = new A<iArrayB>;


Best,
Richard Miles

Reply via email to