Browse Source
- Fixing #38618 by:
- 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
PECL
2 changed files with 133 additions and 15 deletions
@ -0,0 +1,105 @@ |
|||
--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=== |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue