Che cos'è un Iterable in PHP?
Un iterabile è un valore che può essere iterato. È un'opzione eccellente per tenere traccia di quante volte hai attraversato un loop. Ad esempio, se desideri uscire da un ciclo dopo 10 iterazioni, puoi semplicemente farlo utilizzando un iterabile.
Come usare Iterables in PHP
- Un iterabile è qualsiasi valore accettato da a foreach ciclo continuo.
- PHP 7.1 ha introdotto questo pseudo-tipo di dati e può essere utilizzato come tipo di dati di ritorno delle funzioni. Inoltre, la funzione può accettare iterabili come argomento.
Gli iterabili forniscono un metodo semplice per tenere traccia del conteggio delle iterazioni durante la gestione dei cicli, che potrebbe essere utile in determinati scenari. Può anche essere usato come tipo di ritorno di una funzione, e la funzione può accettare gli iterabili come argomenti.
Come verificare se un oggetto è iterabile
Per determinare se un oggetto è un'istanza delle interfacce IteratorAggregate o Iterator, utilizzare l'operatore instanceof. Come esempio:
$obj = new MyClass();
if ($obj instanceof IteratorAggregate || $obj instanceof Iterator) {
// object is iterable
}
Come eseguire il ciclo su un oggetto iterabile
È possibile utilizzare il foreach
loop per eseguire il loop su un oggetto iterabile. Per esempio:
$iterable = new MyIterableClass();
foreach ($iterable as $value) {
// do something with $value
}
Creare la tua classe Iterable
È necessario realizzare l'interfaccia IteratorAggregate e specificare il file getIterator funzione per costruire la tua classe iterabile. Come esempio:
class MyIterableClass implements IteratorAggregate {
private $data = array();
public function __construct($data) {
$this->data = $data;
}
public function getIterator() {
return new ArrayIterator($this->data);
}
}
Q&A
D: Quali sono i diversi tipi di iterabili in PHP?
R: Array, oggetti che implementano l'interfaccia Iterator e gli oggetti che implementano l'interfaccia Traversable sono tutti esempi di iterabili in PHP.
D: Puoi spiegare la differenza tra Iterator
e Traversable
interfacce?
A: L'iteratore interfaccia offre una raccolta di metodi per scorrere un oggetto, come rewind, current, key, next e valid. L'interfaccia Traversable, d'altra parte, dice semplicemente che una classe è attraversabile e non richiede l'implementazione di alcun metodo specifico. Le classi implementate da iteratore devono anche implementare l'interfaccia Traversable.
D: A cosa serve IteratorAggregate
interfaccia?
R: L'interfaccia IteratorAggregate consente di iterare su un oggetto stabilendo un oggetto iteratore esterno che può attraversare il contenuto dell'elemento. Ciò consente all'oggetto di creare il proprio metodo di attraversamento senza dover implementare l'interfaccia Iterator. Le classi che implementano questa interfaccia devono specificare un singolo metodo chiamato getIterator, che restituisce un'istanza di un oggetto interfaccia Iterator.
D: Qual è la differenza tra foreach
e for
loop quando si usano gli iteratori?
R: Il foreach
loop è specificamente progettato per funzionare con gli iteratori, chiama automaticamente il rewind
metodo all'inizio del ciclo e il valid
metodo per verificare se ci sono più elementi su cui eseguire l'iterazione.
The for
loop può essere utilizzato anche con gli iteratori, ma richiede al programmatore di chiamare manualmente il rewind
, valid
, current
, key
e next
metodi nei punti appropriati del ciclo.
D: Come utilizzare Iterator con chiusura?
R: Le chiusure possono essere utilizzate come iteratori in PHP. Per fare ciò, crea un'istanza della classe IteratorIterator e inserisci la tua chiusura come argomento. La chiusura non dovrebbe accettare parametri e restituire un array contenente la chiave e il valore correnti. Per rendere disponibili le variabili esterne all'interno della chiusura, la chiusura dovrebbe includere anche un'istruzione use.
$myArray = [1, 2, 3, 4];
$iter = new IteratorIterator(new ArrayIterator($myArray));
foreach ($iter as $key => $val) {
echo $val . PHP_EOL;
}
Qui, IteratorIterator
class viene utilizzata per iterare sul ArrayIterator
class a cui viene poi passata la funzione di chiusura.
esercizi:
- Cosa sono gli iterabili in PHP?
- Come si esegue l'iterazione su un array utilizzando un ciclo for in PHP?
- Come si esegue l'iterazione su un array utilizzando un ciclo foreach in PHP?
- Come si esegue l'iterazione su un oggetto utilizzando un ciclo foreach in PHP?
- Come si crea un iteratore per una classe personalizzata in PHP?
- Come si usa il
yield
parola chiave per creare una funzione generatore in PHP?
Risposte:
- Un iterabile è un oggetto che può essere iterato (in loop), come un array o un oggetto.
for ($i = 0; $i < count($array); $i++) { // code to be executed; }
foreach ($array as $value) { // code to be executed; }
foreach ($object as $property => $value) { // code to be executed; }
- Per creare un iteratore per una classe personalizzata, la classe deve implementare il
Iterator
interfaccia e definire ilrewind
,valid
,current
,key
enext
metodi. function generator() { yield $value1; yield $value2; }