#27586 [Asn->Csd]: ArrayObject::getIterator crashes with [] assignment
| From: | helly@php.net | Date: | Sat, 13 Mar 2004 19:53:07 +0000 |
| Subject: | #27586 [Asn->Csd]: ArrayObject::getIterator crashes with [] assignment | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-56404@lists.php.net to get a copy of this message | ||
ID: 27586
Updated by: helly@php.net
Reported By: ebay at webcrumb dot com
-Status: Assigned
+Status: Closed
Bug Type: Class/Object related
Operating System: *
PHP Version: 5.0.0b4 (beta4)
Assigned To: helly
New Comment:
This bug has been fixed in CVS.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
Thank you for the report, and for helping us make PHP better.
Previous Comments:
------------------------------------------------------------------------
[2004-03-13 11:35:38] ebay at webcrumb dot com
Description:
------------
I'm not sure if I'm using ArrayObject correctly (I thought you could
use the primitive type 'array' directly to fetch iterators initially
but it seems that's not the case), but I can't tell due to the lack of
documentation ...
All latest service packs/patches are installed.
Reproduce code:
---------------
class StudentList implements IteratorAggregate
{
private $students;
public function __construct() {
$this->students = new ArrayObject( array() );
}
public function add( Student $student ) {
if( !$this->contains( $student ) ) {
// XXXX: this causes the crash!
$this->students[] = $student;
}
}
// ... snip ...
public function getIterator() {
return $this->students->getIterator();
}
}
$students = new StudentList();
$students->add( new Student( '01234123', 'Joe', 'Blo',
'j.blo@here.com'
) );
$students->add( new Student( '00000014', 'Bob', 'Moe',
'b.moe@qut.edu.au' ) );
foreach( $students as $student ) {
echo $student->getId(); // first parameter passed to the above
constructors
}
Expected result:
----------------
This should print out "0123412300000014".
Actual result:
--------------
The Apache 2 service crashes hard.
Resolved by:
public function __construct() {
$this->students = array();
}
// ... snip ...
public function getIterator() {
$arr = new ArrayObject( $this->students );
return $arr->getIterator();
}
Using this code, the expected result is printed out.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=27586&edit=1