diff options
author | Marcus Boerger <helly@php.net> | 2004-04-28 19:58:47 +0000 |
---|---|---|
committer | Marcus Boerger <helly@php.net> | 2004-04-28 19:58:47 +0000 |
commit | 4cdc3117c798c021bf908792d805eb15a08d6462 (patch) | |
tree | e71a5edb6957f0d6aff0a197dcbc476d30d05bf3 /ext/spl/tests/iterator_003.phpt | |
parent | 63a490cd9002dfc5134255ec4bb8f7a1d0713073 (diff) | |
download | php-git-4cdc3117c798c021bf908792d805eb15a08d6462.tar.gz |
- DOS 2 UNIX
Diffstat (limited to 'ext/spl/tests/iterator_003.phpt')
-rwxr-xr-x | ext/spl/tests/iterator_003.phpt | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/ext/spl/tests/iterator_003.phpt b/ext/spl/tests/iterator_003.phpt new file mode 100755 index 0000000000..c60776cb33 --- /dev/null +++ b/ext/spl/tests/iterator_003.phpt @@ -0,0 +1,97 @@ +--TEST-- +SPL: CachingIterator and __toString() +--SKIPIF-- +<?php if (!extension_loaded("spl")) print "skip"; ?> +--FILE-- +<?php + +class Student +{ + private $id; + private $name; + + public function __construct($id, $name) + { + $this->id = $id; + $this->name = $name; + } + + public function __toString() + { + return $this->id . ', ' . $this->name; + } + + public function getId() + { + return $this->id; + } +} + +class StudentIdFilter extends FilterIterator +{ + private $id; + + public function __construct(ArrayObject $students, Student $other) + { + FilterIterator::__construct($students->getIterator()); + $this->id = $other->getId(); + } + + public function accept() + { + echo "ACCEPT ".$this->current()->getId()." == ".$this->id."\n"; + return $this->current()->getId() == $this->id; + } +} + +class StudentList implements IteratorAggregate +{ + private $students; + + public function __construct() + { + $this->students = new ArrayObject(array()); + } + + public function add(Student $student) + { + if (!$this->contains($student)) { + $this->students[] = $student; + } + } + + public function contains(Student $student) + { + foreach ($this->students as $s) + { + if ($s->getId() == $student->getId()) { + return true; + } + } + return false; + } + + public function getIterator() { + return new CachingIterator($this->students->getIterator(), true); + } +} + +$students = new StudentList(); +$students->add(new Student('01234123', 'Joe')); +$students->add(new Student('00000014', 'Bob')); +$students->add(new Student('00000014', 'Foo')); + +// The goal is to verify we can access the cached string value even if it was +// generated by a call to __toString(). To check this we need to access the +// iterator's __toString() method. +$it = $students->getIterator(); +foreach ($it as $student) { + echo $it->__toString(), "\n"; +} +?> +===DONE=== +<?php exit(0); ?> +--EXPECT-- +01234123, Joe +00000014, Bob +===DONE=== |