Как продвинуть его, чтобы сделать его работоспособным в php? [Дубликат]

Если все остальное не удается, перекомпилируйте.

Недавно я смог избавиться от нерешенной внешней ошибки в Visual Studio 2012, просто перекомпилировав нарушивший файл. Когда я перестроил, ошибка исчезла.

Это обычно происходит, когда две (или более) библиотеки имеют циклическую зависимость. Библиотека A пытается использовать символы в B.lib и библиотеке B пытается использовать символы из A.lib. Ничего не существует для начала. Когда вы пытаетесь скомпилировать A, шаг ссылки завершится неудачно, потому что он не может найти B.lib. A.lib будет сгенерирован, но не будет dll. Затем вы компилируете B, который будет успешным и сгенерирует B.lib. Повторная компиляция A теперь будет работать, потому что теперь найден B.lib.

5
задан M Miller 14 December 2013 в 00:58
поделиться

3 ответа

Цель интерфейса Iterator заключается в том, чтобы ваш объект использовался в цикле foreach, он не предназначен для того, чтобы ваш объект действовал как массив. Если вы хотите что-то, что действует как массив, используйте массив.

Вы всегда можете превратить свой объект в массив с помощью функции iterator_to_array , но вы не можете отменить этот процесс.

Если вы видите необходимость для изменения порядка элементов в вашем итерируемом объекте, вы можете создать метод reverse (), который, возможно, использует array_reverse () внутри. Что-то вроде этого: -

class Test implements Iterator
{
    private $testing = [0,1,2,3,4,5,6,7,8,9,10];
    private $index = 0;

    public function current()
    {
        return $this->testing[$this->index];
    }

    public function next()
    {
        $this->index ++;
    }

    public function key()
    {
        return $this->index;
    }

    public function valid()
    {
        return isset($this->testing[$this->key()]);
    }

    public function rewind()
    {
        $this->index = 0;
    }

    public function reverse()
    {
        $this->testing = array_reverse($this->testing);
        $this->rewind();
    }
}

$tests = new Test();
var_dump(iterator_to_array($tests));
$tests->reverse();
var_dump(iterator_to_array($tests));

Выход: -

array (size=11)
  0 => int 0
  1 => int 1
  2 => int 2
  3 => int 3
  4 => int 4
  5 => int 5
  6 => int 6
  7 => int 7
  8 => int 8
  9 => int 9
  10 => int 10

array (size=11)
  0 => int 10
  1 => int 9
  2 => int 8
  3 => int 7
  4 => int 6
  5 => int 5
  6 => int 4
  7 => int 3
  8 => int 2
  9 => int 1
  10 => int 0

Я написал код, чтобы доказать себе, что он будет работать до публикации, и подумал, что я мог бы его бросить в ответ.

17
ответ дан vascowhite 27 August 2018 в 05:41
поделиться

Из PHP

Introduction 
Interface for external iterators or objects that can be iterated themselves internally.

Как вы можете видеть из интерфейса Содержание ¶

Iterator::current — Return the current element
Iterator::key — Return the key of the current element
Iterator::next — Move forward to next element
Iterator::rewind — Rewind the Iterator to the first element
Iterator::valid — Checks if current position is valid

Операция предназначена для форсированной итерации , Поэтому обратное, естественно, не работает и не предназначено для этого.

Для получения дополнительных интерфейсов, связанных с массивом, взгляните на них. ArrayAccess и Countable

Для решения на итераторе обратного объекта рассмотрим ответ здесь Итерации в обратном порядке через массив с решением PHP - SPL?

1
ответ дан Community 27 August 2018 в 05:41
поделиться

Внесите ArrayAccess в свой класс.

Смотрите документацию здесь: http://www.php.net/arrayaccess

2
ответ дан mark.sagikazar 27 August 2018 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: