Ce que je voudrais faire est d'avoir une fonction d'usine statique que vous pouvez donner une série d'attributs et il retourne un objet qui est d'une classe précédemment non déclarée qui étend une classe connue.Comment créer une fabrique qui étend dynamiquement une classe afin que son type change mais hérite des méthodes parentes?
En gros:
<?php
class foo {
public $a;
function increment($b = 1){
$this->a += $b;
}
}
function factory($name, $a){
//returns an object of class $name that extends foo with $this->a set to $a
}
de sorte que si j'écris le code:
<?php
$bar = factory("bar",12);
$bar->increment(5);
print_r($bar);
if(is_a($bar, "foo")){
echo "is a Foo";
}
$moo = factory("moo", 4);
$moo->increment();
print_r($moo);
if(is_a($moo, "foo")){
echo "is a Foo";
}
Je reçois: [modifier]
bar Object
(
[a] => 17
)
is a Foo
moo Object
(
[a] => 5
)
is a Foo
Mais je ne sais pas où pour commencer à chercher les commandes nécessaires pour le faire. Je pense que dans ma fonction d'usine, j'ai besoin de déclarer en quelque sorte que la valeur de $ name étend la classe parente mais ne fait aucun changement, puis construit un nouveau $ name. De cette façon, il a toutes les fonctionnalités de la classe parente, juste un type différent.
Pour que cela soit clair: vous voulez que l'usine * crée * une ** classe ** entièrement nouvelle, puis instancie un objet? Ou en d'autres termes, vous voulez créer la classe ** à l'exécution. – Gordon
À peu près oui, je voudrais définir la classe à l'exécution et l'avoir tous les mêmes méthodes et propriétés du parent. Et oui, je sais que c'est un peu fou. –
Dans ce cas, utilisez la réponse de prodigitalson et jetez un oeil à http://github.com/sebastianbergmann/phpunit/blob/3.5/PHPUnit/Framework/MockObject/Generator.php – Gordon