Cela me confond, en termes plus simples que faut-il faire ? Faites ce que vous expliquez à votre mère ou quelqu'un presque s’il vous plaît.
Réponses
Trop de publicités?Une usine qui fabrique un objet. Donc, si vous voulez construire
class A{
public $classb;
public $classc;
public function __construct($classb, $classc)
{
$this->classb = $classb;
$this->classc = $classc;
}
}
Vous ne voulez pas compter sur d'avoir à faire le code suivant à chaque fois que vous créez l'objet
$obj = new ClassA(new ClassB, new Class C);
C'est là que l'usine allait venir. Nous définissons une usine pour prendre soin de cela pour nous:
class Factory{
public function build()
{
$classc = $this->buildC();
$classb = $this->buildB();
return $this->buildA($classb, $classc);
}
public function buildA($classb, $classc)
{
return new ClassA($classb, $classc);
}
public function buildB()
{
return new ClassB;
}
public function buildC()
{
return new ClassC;
}
}
Maintenant, tout ce que nous avons à faire est de
$factory = new Factory;
$obj = $factory->build();
Le réel avantage est que si vous voulez changer la classe. Disons que nous avons voulu transmettre dans un autre ClassC:
class Factory_New extends Factory{
public function buildC(){
return new ClassD;
}
}
ou une nouvelle ClassB:
class Factory_New2 extends Factory{
public function buildB(){
return new ClassE;
}
}
Maintenant, nous pouvons utiliser l'héritage de modifier facilement la façon dont la classe est créée, à mettre dans un autre ensemble de classes.
Un bon exemple peut être de cette classe d'utilisateur:
class User{
public $data;
public function __construct($data)
{
$this->data = $data;
}
}
Dans cette catégorie, $data
, c'est la classe que nous utilisons pour stocker nos données. Maintenant, pour cette classe, permet de dire que nous utilisons une Session pour stocker nos données. L'usine devrait ressembler à ceci:
class Factory{
public function build()
{
$data = $this->buildData();
return $this->buildUser($data);
}
public function buildData()
{
return SessionObject();
}
public function buildUser($data)
{
return User($data);
}
}
Maintenant, permet de dire à la place que nous voulons pour stocker l'ensemble de nos données dans la base de données, il est très simple de le changer:
class Factory_New extends Factory{
public function buildData()
{
return DatabaseObject();
}
}
Les usines sont un motif de conception que nous utilisons pour contrôler la façon dont nous mettre ensemble des objets, et à l'utilisation correcte de l'usine de modèles nous permet de créer des objets personnalisés dont nous avons besoin.
Classique de l'instanciation d'un objet est:
$Object=new Class();
PHP a la capacité de créer dynamiquement un objet à partir du nom de la variable à l'aide de la syntaxe suivante:
$Object=new $name;
où $nom contient le nom de la classe que l'on veut instancier.
Classique objet d'affacturage ressemblerait à:
function getInstance($class)
{
if($class==='Customer')
{
$Object=new Customer();
}
elseif($class==='Product')
{
$Object=new Product();
}
return $Object;
}
et si vous appelez getInstance ("Produit") la fonction de cette usine permettra de créer et de retourner le Produit objet.
Il n'y a pas besoin de plus, on peut envoyer des "Produit" ou "Custome" comme valeur de la variable pour la dynamique de l'instanciation:
$name='Product';
$Object=new $name; //this will instantiate new Product()