PHP: foreach, annotation e Type Hinting
29 Giugno 2017

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

 


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *