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