Ho un oggetto che implementa Iterator
e contiene 2 matrici: "voci" e "pagine". Ogni volta che eseguo il loop di questo oggetto, voglio modificare l'array di voci, ma ottengo l'errore An iterator cannot be used with foreach by reference
che vedo avviato in PHP 5.2.PHP Un iteratore non può essere utilizzato con foreach per riferimento
La mia domanda è, come è possibile utilizzare la classe Iterator
per modificare il valore dell'oggetto in loop mentre si utilizza foreach
?
Il mio codice:
//$flavors = instance of this class:
class PaginatedResultSet implements \Iterator {
private $position = 0;
public $entries = array();
public $pages = array();
//...Iterator methods...
}
//looping
//throws error here
foreach ($flavors as &$flavor) {
$flavor = $flavor->stdClassForApi();
}
La ragione di questo è che a volte si $flavors
non essere un un'istanza della mia classe e invece sarà solo una matrice semplice. Voglio essere in grado di modificare facilmente questo array indipendentemente dal tipo che è.
perché non basta controllare se si tratta di una classe o r un array prima e poi trattarlo in modo appropriato? – MuppetGrinder
@MuppetGrinder Perché uso questi metodi in molti posti e non voglio dover fare quel controllo ogni volta, invece solo in 1 posto. – shiznatix