TL; DR:  ho notato che  alcuni tutorial  stanno utilizzando una chiamata di metodo in più per recuperare una variabile, nel mio caso   EntityManager    di Doctrine. È generalmente una buona idea usare tale chiamata di metodo extra, quando sembra aggiungere un sovraccarico, anche se questo overhead è "solo un po '" di overhead? Nel mio caso sto parlando del codice che usa   $this->getEntityManager()    e non usa   $this->entityManager    direttamente 
 L'istanziazione di   EntityManager    in Doctrine è una procedura costosa. Ci sono alcune (rare) volte in cui non ho bisogno di un   EntityManager    per fare qualcosa anche se  la maggior parte  delle volte che faccio. 
 Ho notato che molti tutorial utilizzano un metodo "extra" per recuperare   EntityManager   , in questo modo (vedi   getEntityManager   ): 
class GenericRepository
{
    /**
     *
     * @var EntityManager
     */
    protected $em;
    /**
     *
     * @return EntityManager
     */
    final public function getEntityManager()
    {
        if ($this->em === null)
            $this->em = DoctrineConnector::getEntityManager();
        return $this->em;
    }
}
e più avanti nel mio codice ho qualcosa del genere:
class CustomRepository extends GenericRepository
{
    /**
     * Looks up Category Entity by its string name
     *
     * @param string $name
     * @return Product
     */
    function getProduct($partNumber)
    {
        $product = $this->getEntityManager() //<--calling entity Manager indirectly
        ->getRepository(ProductEntity::class)
        ->findOneBy(array(
            'model' => $partNumber
        ));
        return $product;
    }
}
Domanda
 Posso sostituire   getEntityManager()    chiamata sopra con   em   , se nella mia classe   GenericRepository    I inizializzo il repository immediatamente durante la costruzione. Posso quindi accorciare il mio codice come mostrato di seguito ed evitare una chiamata al metodo   getEntityManager()    in più, in questo modo: 
        $product = $this->em  //<-- this is different, using em directly
        ->getRepository(ProductEntity::class)
        ->findOneBy(array(
            'model' => $partNumber
        ));
   em    sarà garantito che non sia nullo in quel caso se lo inizializzo in fase di costruzione. 
 Perché non consultare invece   $em    direttamente e rimuovere l'inizializzazione pigra? 
 Quali sarebbero alcuni motivi per mantenere   getEntityManager()    nel mio codice e continuare a utilizzare l'inizializzazione pigra a spese del sovraccarico di una chiamata di metodo in più?