On Sun, Nov 17, 2019 at 9:42 AM Aimeos | Norbert Sendetzky <
norb...@aimeos.com> wrote:

> 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


Also the toArray() should be called when an Arrayable is cast to an array:
(array)$arrayable.

And shouldn’t the toArray match the same naming semantics as __toString?
-- 
"Do not go gentle into that good night. Rage, rage against the dying of the
light." — Dylan Thomas

Reply via email to