Edit report at http://bugs.php.net/bug.php?id=33891&edit=1
ID: 33891 User updated by: marcos dot neves at gmail dot com Reported by: marcos dot neves at gmail dot com -Summary: make array a traversable +Summary: make array implements traversable, ArrayAccess and Countable Status: Bogus Type: Feature/Change Request Package: *General Issues Operating System: any -PHP Version: 5.1.0b3 +PHP Version: 5.2.13 5.3.2 New Comment: Still not working: <? function loop(Traversable $traversable) { foreach($traversable as $k => $v) echo "$k => $v\n"; } $primos = explode(" ", "1 2 3 5 7 11 13 17 19"); // loop($primos); // does not work loop(new ArrayIterator($primos)); // works ?> Previous Comments: ------------------------------------------------------------------------ [2010-03-13 18:17:57] f...@php.net Please try 5.3.2 or 5.2.13. ------------------------------------------------------------------------ [2010-03-13 18:08:24] wrzasq at gmail dot com It should also expose interfaces ArrayAccess and Countable. It's very frustrating when you use type hinting to force iterable structures or array-like accessible and it comes out that you can't pass array themselves. ------------------------------------------------------------------------ [2005-07-27 22:14:08] marcos dot neves at gmail dot com Description: ------------ Traversable is an internal interface that says "I can be used in a foreach". Since array can be used too, would be nice if array be accepted internally in parameters that expect traversable. Reproduce code: --------------- <? function acceptArray(array $t) { echo "\n".__FUNCTION__."\n"; foreach($t as $k=>$v) { echo "$k=>$v\n"; } } function acceptTraversable(Traversable $t) { echo "\n".__FUNCTION__."\n"; foreach($t as $k=>$v) { echo "$k=>$v\n"; } } $test = array("is", "array", "traversable", "too", "?"); acceptArray($test); // ok acceptTraversable(new ArrayIterator($test)); // ok acceptTraversable($test); // would be nice ?> Expected result: ---------------- acceptTraversable($test); shoud accept an array, since it's too a Traversable structure(can be used in a foreach). Actual result: -------------- Fatal error: Argument 1 must be an object of class Traversable ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=33891&edit=1