Le Factory est un design pattern incontournable qui va vous permettre de beaucoup mieux structurer vos classes. Le principe est d'avoir une classe qui va se charger de créer les objets dont on a besoin.

Un anneau pour les gouverner tous

Pour commencer nous allons prendre un exemple simple.

<?php
class Voiture
{
    private $marque;

    public function __construct($marque)
    {
        $this->marque = $marque;
    }

    public function getName()
    {
        return 'Voiture ' . $this->marque;
    }
}

class VoitureFactory
{
    public static function create($marque)
    {
        return new Voiture($marque);
    }
}

$twingo = VoitureFactory::create('Twingo');
$c3 = VoitureFactory::create('C3');

La classe factory contient donc des méthodes statiques qui permettent de retourner des instances.

Pour aller plus loin

Le factory créé précédemment est relativement simple et n'offre que peut d'intérêt. On peut aller plus loin en créant une méthode qui prendra des paramètre pour instancier plusieurs classes en une seule fois.

<?php
class ArticleTable(){  }

class VoitureTable(){  }

class UtilisateurTable(){  }

class TableFactory(){

    public static function create($table){
        $class_name = ucfirst($table) . 'Table'; 
        return new $class_name(); 
    }

}

TableFactory::create('Article');