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

Reply via email to