summaryrefslogtreecommitdiff
path: root/ext/spl/tests/iterator_003.phpt
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2004-04-28 19:58:47 +0000
committerMarcus Boerger <helly@php.net>2004-04-28 19:58:47 +0000
commit4cdc3117c798c021bf908792d805eb15a08d6462 (patch)
treee71a5edb6957f0d6aff0a197dcbc476d30d05bf3 /ext/spl/tests/iterator_003.phpt
parent63a490cd9002dfc5134255ec4bb8f7a1d0713073 (diff)
downloadphp-git-4cdc3117c798c021bf908792d805eb15a08d6462.tar.gz
- DOS 2 UNIX
Diffstat (limited to 'ext/spl/tests/iterator_003.phpt')
-rwxr-xr-xext/spl/tests/iterator_003.phpt97
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===