codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
<?php class Query { public function execute() { echo "Calling Query::execute()\n"; return new ArrayIterator(array( 'hello', 'world', )); } } abstract class Lazy { private $lazy_variables = array(); protected function __get($key) { echo "Calling Lazy::__get()\n"; if(isset($this->lazy_variables[$key])) { return $this->$key = call_user_func($this->lazy_variables[$key]); } return NULL; } protected function registerLazyVariable($var, $callback) { $this->lazy_variables[$var] = $callback; } } class LazyIterator extends Lazy implements Iterator { protected $query; public function __construct(Query $query) { $this->query = $query; $this->registerLazyVariable('iterator', array($this, 'getInstance')); } protected function getInstance() { echo "Calling LazyIterator::getInstance()\n"; return $this->query->execute(); } public function next() { $this->iterator->next(); } public function key() { return $this->iterator->key(); } public function current() { return $this->iterator->current(); } public function valid() { return $this->iterator->valid(); } public function rewind() { $this->iterator->rewind(); } } $lazy_it = new LazyIterator(new Query); foreach($lazy_it as $key => $val) echo "{$val}\n"; echo "\n"; foreach($lazy_it as $key => $val) echo "{$val}\n";
Private
[
?
]
Run code