Concept: "arrayable" pseudo type and \Arrayable interface

From: Date: Sun, 17 Nov 2019 14:41:20 +0000
Subject: Concept: "arrayable" pseudo type and \Arrayable interface
Groups: php.internals 
Request: Send a blank email to internals+get-107806@lists.php.net to get a copy of this message
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(); }

« previous php.internals (#107806) next »