Re: Concept: "arrayable" pseudo type and \Arrayable interface

From: Date: Sun, 17 Nov 2019 16:10:22 +0000
Subject: Re: Concept: "arrayable" pseudo type and \Arrayable interface
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-107807@lists.php.net to get a copy of this message
On Sun, Nov 17, 2019 at 9:42 AM Aimeos | Norbert Sendetzky < norbert@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

« previous php.internals (#107807) next »