Встроенный ArrayObject использует IteratorAggregate вместо Iterator, поэтому там нет всяких next.
foreach умеет работать с 2мя типами: массив и объект реализующий Traversable (наследниками от которого являются Iterator & IteratorAggregate)
Я к тому, что кроме Iterator есть IteratorAggregate.
Если вы про комментарий «Не поддерживается несколько обходов одновременно», то это очевидно. Для такой поддержки можно использовать IteratorAggregate и каждый раз возвращать новый объект итератора. Тот же ArrayObject замечательно справляется с поставленной задачей (он как раз используется getIterator)
1) Поставленная задача решается совсем не Fuzzing'ом. А честным написанием тестов на типы входных данных. Без какого либо «рандомного» поведения. Fuzzing нужен для обнаружения ошибок, которые сложно поймать статическим тестами.
2) Если задача все таки Fuzzing, то генерировать нужно рандомные значение, которые могут генерировать весь спектр значений. Так, например, строка, генерируемая через uniqid будет содержать только ограниченный набор символов и иметь постоянную длину, тем самым не покрывая огромное множество вариантов
3) Задание параметров через наследование — не лучший вариант.
4) Если использовать getRand() в getArray() без ограничения на тип, то можно легко упасть в очень длинный цикл при $allowedTytes = array(0,1,2);
Та же история с переходом на 5.3. У нас замечательно живет куча кода написанного под предыдущие 5.х версии на серверах с 5.3. Что-то, конечно, нужно подпиливать. Но это не такая уж сложная задача. Я уж молчу, что, если писать тесты, то переходы вообще являются плевым делом.
Почему мы не использовали — из коробки Kohana не поддерживает эти миграции, использовать для этого Doctrine тоже не хочется — слишком уж он монструозен ИМХО.
Doctrine Migrations — относительно независимая билиотека, работает с чистым sql, можно использовать с чем угодно, правда 5.3+, но думаю, что это уже не проблема. Так что про монструзность — зря.
Киев классный город, можно вполне съездить на выходные.
foreach умеет работать с 2мя типами: массив и объект реализующий Traversable (наследниками от которого являются Iterator & IteratorAggregate)
Если вы про комментарий «Не поддерживается несколько обходов одновременно», то это очевидно. Для такой поддержки можно использовать IteratorAggregate и каждый раз возвращать новый объект итератора. Тот же ArrayObject замечательно справляется с поставленной задачей (он как раз используется getIterator)
ArrayObject implements IteratorAggregate,...
Вы так пишете, как будто hsdpa хуже чем 3g. Или я просто не понял смысл этой фразы
2) Если задача все таки Fuzzing, то генерировать нужно рандомные значение, которые могут генерировать весь спектр значений. Так, например, строка, генерируемая через uniqid будет содержать только ограниченный набор символов и иметь постоянную длину, тем самым не покрывая огромное множество вариантов
3) Задание параметров через наследование — не лучший вариант.
4) Если использовать getRand() в getArray() без ограничения на тип, то можно легко упасть в очень длинный цикл при $allowedTytes = array(0,1,2);
ЗЫ. А Россия как один огромный шредер :(
Doctrine Migrations — относительно независимая билиотека, работает с чистым sql, можно использовать с чем угодно, правда 5.3+, но думаю, что это уже не проблема. Так что про монструзность — зря.