On Sun, Nov 17, 2019 at 9:42 AM Aimeos | Norbert Sendetzky <
[email protected]> 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