The union types RFC passed, so I didn't see much value in the arrayable pseudo 
except pressing less keys. 

Regarding the Arrayable interface, or toArray method. Since it extends 
Iterator, iterator_to_array can do the job already. 
So what's the benfits for introducing this new interface? 

I would suggest to find a way to make those built-in array_* functions support 
the arraylike objects, no matter which interface it requires, existing 
ArrayAccess, or any new interface.

Regards,
CHU Zhaowei

> -----Original Message-----
> From: Aimeos | Norbert Sendetzky <norb...@aimeos.com>
> Sent: Sunday, November 17, 2019 10:41 PM
> To: internals@lists.php.net
> Subject: [PHP-DEV] Concept: "arrayable" pseudo type and \Arrayable
> interface
> 
> Since PHP 7.1 there's the "iterable" pseudo type hint that matches "array"
> and "Traversable".
> 
> PHP frameworks would profit from support of an "arrayable" pseudo type
> hint that matches "array" and all objects that implements "Traversable",
> "ArrayAccess" and "Countable".
> 
> Thus, we could pass arrays or all objects that behave like arrays to methods
> and do:
> 
> function useArrayable( arrayable $arg ) : arrayable {
>     $cnt = count( $arg );
>     $value = $arg['key'];
>     foreach( $arg as $key => $entry ) { ... }
>     return $arg;
> }
> 
> It would be useful to implement an Arrayable interface too:
> 
> interface Arrayable extends \Iterator, \Countable, \ArrayAccess {
>     public function toArray() : array;
> }
> 
> Then, we can use array like objects:
> 
> class Test implements \Arrayable
> {
>     // ...
> }
> 
> $arrayable = new Test();
> $arrayable['key'] = $value;
> $arrayable = useArrayable( $arrayable );
> 
> And if necessary, we can convert them to native arrays:
> 
> if( $arrayable instanceof \Arrayable ) {
>     $arrayable = $arrayable->toArray();
> }
> 
> --
> PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit:
> http://www.php.net/unsub.php
> 

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to