php-src/ext/spl/tests/bug38618.phpt
Marcus Boerger d71b3de7f4 - Fixing #38618 by:
- [DOC] ArrayIterator::CHILD_ARRAYS_ONLY, ArrayObject::CHILD_ARRAYS_ONLY
  Passing this flag in the ctor prevents ArrayIterator from following
  objects in ArrayObject::getIterator(), ArrayIterator::hasChildren(),
  ArrayIterator::getChildren().
  The exact behavior might change:
    - should the flag be set by default
    - should the flag be changed to have a negative effect
2007-12-05 15:56:41 +00:00

106 lines
1.7 KiB
PHP

--TEST--
Bug #38618 (RecursiveArrayIterator::hasChildren() follows objects)
--FILE--
<?php # vim:ft=php
class FruitPublic
{
public $title;
public function __construct($title)
{
$this->title = $title;
}
public function __toString()
{
return $this->title;
}
}
class FruitProtected
{
protected $title;
public function __construct($title)
{
$this->title = $title;
}
public function __toString()
{
return $this->title;
}
}
function test_array($array, $which, $flags = 0)
{
echo "===$which===\n";
$it = new RecursiveArrayIterator($array, $flags);
foreach (new RecursiveIteratorIterator($it) as $k => $fruit) {
echo $k , ' => ', $fruit, "\n";
}
}
$array = array(
1 => array(
1 => array(
1 => 'apple',
),
2 => array(
1 => 'grape',
),
),
);
test_array($array, 'Default with array');
$array = array(
1 => array(
1 => array(
1 => new FruitPublic('apple'),
),
2 => array(
1 => new FruitPublic('grape'),
),
),
);
test_array($array, 'Public Property');
$array = array(
1 => array(
1 => array(
1 => new FruitProtected('apple'),
),
2 => array(
1 => new FruitProtected('grape'),
),
),
);
test_array($array, 'Protected Property');
test_array($array, 'Public Property New', ArrayIterator::CHILD_ARRAYS_ONLY);
test_array($array, 'Protected Property New', ArrayIterator::CHILD_ARRAYS_ONLY);
?>
===DONE===
<?php exit(0); ?>
?>
===DONE===
--EXPECTF--
===Default with array===
1 => apple
1 => grape
===Public Property===
title => apple
title => grape
===Protected Property===
===Public Property New===
1 => apple
1 => grape
===Protected Property New===
1 => apple
1 => grape
===DONE===