home 首页 » 精彩日志 » 日志查看

php5中Iterator与smarty整合

mayongzhan 译
 2008-03-10 22:40:07 

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}

这样就能输出正确的结果了。

 

收藏到网摘:

发表评论:
大名:*
网址:   http://sitename
评论:*