← Tutti gli articoliPHP e database

PHP e database

PHP: foreach, annotation e Type Hinting

Matteo Galacci ·

Un parametro array viene verificato da PHP, ma non impone il tipo di ciascun elemento. PHPDoc aiuta IDE e analizzatori statici a descrivere una collezione:

/** @param Reservation[] $reservations */
function printReservations(array $reservations): void
{
    foreach ($reservations as $reservation) {
        echo $reservation->getName();
    }
}

Reservation rappresenta la classe del tuo progetto: importala con use o usa il nome completo. Il commento non crea un controllo a runtime; per input non fidati verifica esplicitamente ogni oggetto o costruisci una collezione che garantisca il vincolo.

Quando il tipo non può essere dedotto, l’annotazione locale corretta è:

/** @var Reservation $reservation */

Il tipo precede il nome della variabile. È meglio descrivere correttamente la funzione che restituisce la collezione anziché aggiungere annotazioni locali per mascherare un tipo errato. Nei tool che lo supportano, list<Reservation> distingue una lista con chiavi consecutive da un array generico.

Un esempio eseguibile

In un file PHP 8 definisci questa classe prima della funzione printReservations mostrata sopra:

final class Reservation
{
    public function __construct(private string $name) {}
    public function getName(): string { return $this->name; }
}

Dopo la funzione chiama printReservations([new Reservation("Camera 1")]);. Eseguendo il file da terminale devi leggere Camera 1; nell’IDE il completamento di getName deve essere disponibile dentro foreach. La prova dimostra separatamente l’esecuzione PHP e l’assistenza dell’IDE, non un controllo runtime degli elementi tramite PHPDoc.

Fonti e approfondimenti