Dino Geek, cerca di aiutarti

Come funziona la funzione "yield" in PHP?


La funzione `yield` in PHP è una funzionalità introdotta a partire da PHP 5.5 che consente la creazione di generatori. I generatori sono oggetti che possono essere iterati come array, ma non richiedono la memorizzazione in memoria di tutti i valori contemporaneamente. In altre parole, i generatori consentono di creare sequenze di valori su richiesta, rendendo il codice più efficiente in termini di utilizzo della memoria.

Quando una funzione contiene uno o più `yield`, essa non è più una funzione normale ma un generatore. L’esecuzione del generatore è sospesa quando viene chiamato `yield`, e riprende dal punto in cui è stata sospesa la volta successiva che il generatore è invocato.

Ecco un esempio base per chiarire come funziona il `yield`:

```
function contatore($inizio, $fine) { for ($i = $inizio; $i <= $fine; $i++) { yield $i; }
}

$gen = contatore(1, 5);
foreach ($gen as $numero) { echo $numero . “\n”;
}
```

In questo esempio, la funzione `contatore` genera numeri da 1 a 5. Quando viene chiamata `yield $i`, la funzione restituisce il valore di `$i` e sospende la sua esecuzione. Quando il generatore viene iterato con `foreach`, ogni chiamata successiva al generatore riprende l’esecuzione da dove era stata sospesa.

Un uso comune di `yield` è per creare generatori che possono produrre grandi serie di date, stringhe o numeri senza richiedere grandi quantità di memoria. Ad esempio, supponiamo di voler controllare un file di log molto grande e cercare determinate stringhe. Caricare l’intero file in un array potrebbe non essere pratico, ma utilizzare un generatore permette di gestire agevolmente questa operazione:

```
function leggereFile($nomeFile) { $handle = fopen($nomeFile, ‘r’); if (!$handle) { throw new Exception(“Impossibile aprire il file $nomeFile”); } while (($linea = fgets($handle)) !== false) { yield $linea; } fclose($handle);
}

foreach (leggereFile(‘logfile.txt’) as $linea) { if (strpos($linea, ‘ERRORE’) !== false) { echo $linea; }
}
```

In questo codice, la funzione `leggereFile` utilizza `yield` per leggere un file riga per riga. Questo evita di caricare l’intero file in memoria e permette di processare file molto grandi in modo efficiente.

Un altro esempio potrebbe essere un semplice generatore di Fibonacci:

```
function fibonacci($max) { $a = 0; $b = 1; for ($i = 0; $i < $max; $i++) { yield $a; [$a, $b] = [$b, $a + $b]; }
}

foreach (fibonacci(10) as $numero) { echo $numero . “ “;
}
```

In questo esempio, il generatore `fibonacci` produce i primi 10 numeri della sequenza di Fibonacci. Ancora una volta, `yield` consente di sospendere e riprendere l’esecuzione della funzione, generando i valori uno alla volta.

Per approfondire ulteriormente, potete consultare la documentazione ufficiale di PHP:

- [PHP Manual – Generators](https://www.php.net/manual/en/language.generators.php)
- [PHP Manual – Yield](https://www.php.net/manual/en/language.generators.syntax.php)

Queste risorse sono utili per comprendere meglio come `yield` e i generatori possano essere utilizzati in vari contesti, ottimizzando il codice per performance e memoria.


Genera semplicemente articoli per ottimizzare il tuo SEO
Genera semplicemente articoli per ottimizzare il tuo SEO





DinoGeek offre articoli semplici su tecnologie complesse

Vuoi essere citato in questo articolo? È molto semplice, contattaci a dino@eiki.fr

CSS | NodeJS | DNS | DMARC | MAPI | NNTP | htaccess | PHP | HTTPS | Drupal | WEB3 | LLM | Wordpress | TLD | Nome dominio | IMAP | TCP | NFT | MariaDB | FTP | Zigbee | NMAP | SNMP | SEO | E-Mail | LXC | HTTP | MangoDB | SFTP | RAG | SSH | HTML | ChatGPT API | OSPF | JavaScript | Docker | OpenVZ | ChatGPT | VPS | ZIMBRA | SPF | UDP | Joomla | IPV6 | BGP | Django | Reactjs | DKIM | VMWare | RSYNC | Python | TFTP | Webdav | FAAS | Apache | IPV4 | LDAP | POP3 | SMTP

| Whispers of love (API) | Déclaration d'Amour |






Avviso Legale / Condizioni Generali di Utilizzo