Iterator(迭代器)在PHP5中是非常重要的,我注意到Iterator在Smarty中不能正常的工作。
Smarty会自动将一个object(对象)转换成array(数组),所以当年在Smarty中循环输出一个object时,模板会自动循环这个object的属性。
例如,建立一个类,然后在函数中定义某些要循环的部分,将这些部分放到protected类型的$_data变量中。
<?php
class MyClass implements Iterator
{
protected $_data = array();
public function rewind()
{
reset($this->_data);
}
public function current()
{
return current($this->_data);
}
public function key()
{
return key($this->_data);
}
public function next()
{
return next($this->_data);
}
public function valid()
{
return $this->current() !== false;
}
public function size()
{
return count($this->_data);
}
}
?>
然后在Smarty使用这个类
{foreach from=$myClassObj item=row}
{$row}
{/foreach}
这样不会输出想要的结果,下面做一下简单的修改,将$myClassObj改成$myClassObj->getData():
{foreach from=$myClassObj->getData() item=row}
{$row}
{/foreach}
这样就能输出正确的结果了。