PHP: foreach, annotation e Type Hinting
Il Type Hinting è sicuramente una funzionalità comoda se non indispensabile quando si programma con IDE come Phpstorm.
Solitamente siamo abituati a utilizzarlo nella dichiarazione di metodi così da “tipizzare” i parametri, in questo modo:
/**
* Controlla se una prenotazione appartiene all'utente che cerca di visualizzarla
*
* @param array $reservation
* @param \Acme\DemoBundle\Entity\User $user
* @return bool
*/
public function hasReservation(array $reservations, User $user)
{
........
}
Nel metodo sopra abbiamo definito che $user è di tipo \Acme\DemoBundle\Entity\User e $reservation invece è di tipo array. $user e $reservations saranno controllata a runtime, e se si passasse al metodo variabili di tipo diverso da quelli indicati verrà generato un errore. Avendo indicato i tipi delle variabili, nel caso di un oggetto come $user, sarà possibile accedere ai suoi metodi e proprietà attraverso l’auto completamento (presente in IDE come Phpstorm). Andando poi a ciclare $reservations potrebbe essere comodo usare la stessa logica per accedere a metodi e proprietà degli oggetti dell’array:
/**
* Controlla se una prenotazione appartiene all'utente che cerca di visualizzarla
*
* @param array $reservation
* @param \Acme\DemoBundle\Entity\User $user
* @return bool
*/
public function hasReservation(array $reservations, User $user)
{
foreach($reservations as $reservation) {
/**
* @var $reservation \Acme\DemoBundle\Entity\Reservation
*/
echo $reservation->getName();
}
}
Utilizzando le annotation con il tag @var dentro al foreach abbiamo indicato che gli elementi $reservation dentro l’array $reservations, sono di tipo \Acme\DemoBundle\Entity\Reservation, così possiamo sfruttare l’auto completamento anche sulla variabile $reservation