Annotation of embedaddon/php/ext/spl/tests/iterator_003.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: SPL: CachingIterator and __toString()
! 3: --FILE--
! 4: <?php
! 5:
! 6: class Student
! 7: {
! 8: private $id;
! 9: private $name;
! 10:
! 11: public function __construct($id, $name)
! 12: {
! 13: $this->id = $id;
! 14: $this->name = $name;
! 15: }
! 16:
! 17: public function __toString()
! 18: {
! 19: return $this->id . ', ' . $this->name;
! 20: }
! 21:
! 22: public function getId()
! 23: {
! 24: return $this->id;
! 25: }
! 26: }
! 27:
! 28: class StudentIdFilter extends FilterIterator
! 29: {
! 30: private $id;
! 31:
! 32: public function __construct(ArrayObject $students, Student $other)
! 33: {
! 34: FilterIterator::__construct($students->getIterator());
! 35: $this->id = $other->getId();
! 36: }
! 37:
! 38: public function accept()
! 39: {
! 40: echo "ACCEPT ".$this->current()->getId()." == ".$this->id."\n";
! 41: return $this->current()->getId() == $this->id;
! 42: }
! 43: }
! 44:
! 45: class StudentList implements IteratorAggregate
! 46: {
! 47: private $students;
! 48:
! 49: public function __construct()
! 50: {
! 51: $this->students = new ArrayObject(array());
! 52: }
! 53:
! 54: public function add(Student $student)
! 55: {
! 56: if (!$this->contains($student)) {
! 57: $this->students[] = $student;
! 58: }
! 59: }
! 60:
! 61: public function contains(Student $student)
! 62: {
! 63: foreach ($this->students as $s)
! 64: {
! 65: if ($s->getId() == $student->getId()) {
! 66: return true;
! 67: }
! 68: }
! 69: return false;
! 70: }
! 71:
! 72: public function getIterator() {
! 73: return new CachingIterator($this->students->getIterator(), true);
! 74: }
! 75: }
! 76:
! 77: $students = new StudentList();
! 78: $students->add(new Student('01234123', 'Joe'));
! 79: $students->add(new Student('00000014', 'Bob'));
! 80: $students->add(new Student('00000014', 'Foo'));
! 81:
! 82: // The goal is to verify we can access the cached string value even if it was
! 83: // generated by a call to __toString(). To check this we need to access the
! 84: // iterator's __toString() method.
! 85: $it = $students->getIterator();
! 86: foreach ($it as $student) {
! 87: echo $it->__toString(), "\n";
! 88: }
! 89: ?>
! 90: ===DONE===
! 91: <?php exit(0); ?>
! 92: --EXPECT--
! 93: 01234123, Joe
! 94: 00000014, Bob
! 95: ===DONE===
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>