Hallo dedlfix,
Du meinst CallbackFilterIterator.
Ach verdammt. Natürlich.
Es ist auch nicht erforderlich, dass ein Iterator intern einen Generator verwendet.
Schon klar. Ich wollte halt was schnelles einfaches haben, was iterierbar ist und als Input für den CallbackFilterIterator geeignet ist. Die Beispiele im PHP Handbuch verwenden den FilesystemIterator, den kann ich in der PHP Sandbox nicht verwenden.
Aber diese Beispiele verwenden keinen rewind für den CallbackFilterIterator. Deswegen bin ich verwirrt, dass ich für meinen Spielzeugfall einen brauchen sollte.
Ich habe jetzt mal das hier gemacht:
$aa = new ArrayIterator([1,2,3,4,5,6,7,8,9,10]);
if ($aa->valid()) echo "ArrayIterator is valid";
$fa = new CallbackFilterIterator($aa, fn($i) => $i % 3 == 0);
if ($aa->valid()) echo "ArrayIterator is valid";
if ($fa->valid()) echo "CbFilterIterator is valid";
Der ArrayIterator ist nach Erzeugung valid, ohne rewind. Nach Erstellung des CallbackFilterIterators ist der ArrayIterator immer noch valid. Aber der CallbackFilterIterator erst nach rewind.
Zwei SPL Iteratoren sollten soch doch gleich verhalten. Doch ein Bug?
Rolf
sumpsi - posui - obstruxi