Bug #64428 [Opn->Nab]: SPL RecursiveIteratorIterator::getChildren Uncaught exception
Edit report at https://bugs.php.net/bug.php?id=64428&edit=1
ID: 64428
Updated by: nikic@php.net
Reported by: namarpi at yahoo dot com
Summary: SPL RecursiveIteratorIterator::getChildren Uncaught
exception
-Status: Open
+Status: Not a bug
Type: Bug
Package: SPL related
Operating System: Windows XP
PHP Version: 5.4.13
Block user comment: N
Private report: N
New Comment:
It is illegal to call getChildren() if hasChildren() is not true, as is the case here. The operation
is ill-defined, and that's why you get an exception.
Previous Comments:
------------------------------------------------------------------------
[2013-03-15 18:23:11] namarpi at yahoo dot com
On the screen seems everything is OK, I can see the var_dump result also, but in the debug.log file
there is a PHP error message.
------------------------------------------------------------------------
[2013-03-15 18:16:44] namarpi at yahoo dot com
I am using 14 Mar 2012, PHP 5.4.13, and running the test script without exception handling. This is
the result:
[15-Mar-2013 18:06:44 UTC] RecursiveArrayIterator
[15-Mar-2013 18:06:44 UTC] PHP Fatal error: Uncaught exception 'InvalidArgumentException'
with message 'Passed variable is not an array or object, using empty array instead' in
[...]
Stack trace:
#0 [internal function]: ArrayIterator->__construct('a 1 text', 67108864)
------------------------------------------------------------------------
[2013-03-15 16:28:40] laruence@php.net
getInnerIterator()->getChildren() => 'a 1 text'
why this is a bug?
------------------------------------------------------------------------
[2013-03-15 11:15:41] namarpi at yahoo dot com
Sorry, correctly this is about RecursiveArrayIterator::getChildren, and a more proper
Test script here:
---------------------------
function example() {
$array = array (
'a' => array(
'a_1' => 'a 1 text',
),
);
$array_object = new ArrayObject( $array, 0, "RecursiveArrayIterator" );
$iterator = new RecursiveIteratorIterator( $array_object->getIterator(),
RecursiveIteratorIterator::SELF_FIRST );
foreach( $iterator as $key => $current ) {
var_dump( $iterator->getInnerIterator() );
//if( $key == 'a' ) {
var_dump( get_class($iterator->getInnerIterator() ));
var_dump( $iterator->getInnerIterator()->getChildren() );
//}
}
}
example();
------------------------------------------------------------------------
[2013-03-15 09:40:23] namarpi at yahoo dot com
Description:
------------
Recently I am working with SPL Iterators, and got an uncaught exception with the Test script.
Test script:
---------------
function example() {
$array = array (
'a' => array(
'a_1' => 'a 1 text',
),
);
$array_object = new ArrayObject( $array, 0, "RecursiveArrayIterator" );
$iterator = new RecursiveIteratorIterator( $array_object->getIterator(),
RecursiveIteratorIterator::SELF_FIRST );
foreach( $iterator as $key => $current ) {
var_dump( $iterator->getChildren );
var_dump( $iterator->getInnerIterator() );
//if( $key == 'a' ) {
var_dump( $iterator->getInnerIterator()->getChildren() );
//}
}
}
example();
Expected result:
----------------
Smooth iteration through the leaves.
Actual result:
--------------
[15-Mar-2013 09:29:55 UTC] PHP Fatal error: Uncaught exception 'InvalidArgumentException'
with message 'Passed variable is not an array or object, using empty array instead' in
[...]
Stack trace:
#0 [internal function]: ArrayIterator->__construct('a 1 text', 67108864)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=64428&edit=1
Thread (6 messages)