Encore une horreur de PHP …
Il se fait que parfois on ait besoin d'une structure particulière et qu'on ne peut pas en changer sans devoir revoir tout, ce qui dans ce cas est assez débile vu qu'à part le fait que PHP ne le gère pas, le code est entièrement bon.
J'avais besoin d'une class usine en PHP.
Bon déjà petite particularité, si on souhaite créer une instance de l'usine, on ne peut pas récupérer la classe enfant créée directement à l'instanciation de l'usine. Donc soit on utilise une méthode statique (sans passer par une instanciation) soit on passe par deux étape: 1) instanciation 2) création de la classe enfant.
Jusqu'à là c'est surmontable.
<?php
class A
{
static function createInstance($className)
{
return new $className();
}
}
class B
{
}
echo get_class(A::createInstance('B')); // B
?>
Le problème intervient si le construction de la class cible est une function dont on ne connait pas ses arguments à l'avance.
Exemple:
class B
{
function __construct()
{
$args = func_get_args();
// …
}
}
À ce moment là on est obligé d'utiliser call_user_func_array et la syntaxe spécialement conçue pour appeller une fonction située dans une classe.
$targetClass = call_user_func_array(array($className, '__construct'), $args);
Sauf que, FAIL, ça appelle __construct de façon statique et renvoit NULL.
Peut-être que quelqu'un pourra m'aider
mais je pense plutôt que PHP n'est pas fait pour :/