Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Iterator и fgetcsv — не выполняется переход на следующую строку

Anna | 31.05.2014 | нет комментариев

Приветствую, програжители. Есть вот такая реализация итератора, как показана на листинге ниже. Отчего-то при попытке пробежаться по файлу foreach, неизменно возвращается первая строка, впрочем если вызов fgetcsv() разместить в способ current, то строки читаются правильно. Может ли кто-нибудь пояснить сходственное поведение, может быть я неудовлетворительно отлично знаком с итераторми в php и не до конца понимаю, как они работают?

<?php
namespace applicationcomponents;

use Iterator;

class CSVFileIterator implements Iterator{

    protected $_filePointer;
    protected $_currentLine;
    protected $_index = 0;

    function __construct($fileName)
    {
        $this->_filePointer = fopen($fileName,'r');
        $this->_currentLine = fgetcsv($this->_filePointer);
    }

    /**
     * (PHP 5 >= 5.0.0)<br/>
     * Return the current element
     * @link http://php.net/manual/en/iterator.current.php
     * @return mixed Can return any type.
     */
    public function current()
    {
        return $this->_currentLine;
    }

    /**
     * (PHP 5 >= 5.0.0)<br/>
     * Move forward to next element
     * @link http://php.net/manual/en/iterator.next.php
     * @return void Any returned value is ignored.
     */
    public function next()
    {
        $this->_currentLine = fgetcsv($this->_filePointer);
        $this->_index  ;
    }

    /**
     * (PHP 5 >= 5.0.0)<br/>
     * Return the key of the current element
     * @link http://php.net/manual/en/iterator.key.php
     * @return mixed scalar on success, or null on failure.
     */
    public function key()
    {
        return $this->_index;
    }

    /**
     * (PHP 5 >= 5.0.0)<br/>
     * Checks if current position is valid
     * @link http://php.net/manual/en/iterator.valid.php
     * @return boolean The return value will be casted to boolean and then evaluated.
     * Returns true on success or false on failure.
     */
    public function valid()
    {
        return !feof($this->_filePointer);
    }

    /**
     * (PHP 5 >= 5.0.0)<br/>
     * Rewind the Iterator to the first element
     * @link http://php.net/manual/en/iterator.rewind.php
     * @return void Any returned value is ignored.
     */
    public function rewind()
    {
        $this->_index = 0;
        rewind($this->_filePointer);
    }
}

 

 Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB