Vous pouvez le faire avec Reflection:
<?php
class Pants
{
public function __construct($a, $b, $c)
{
$this->a = $a;
$this->b = $b;
$this->c = $c;
}
}
$className = 'pants';
$class = new ReflectionClass($className);
$obj = $class->newInstanceArgs(array(1, 2, 3));
var_dump($obj);
Cela fonctionne aussi si votre constructeur utilise le style ancien (à moins que votre code utilise des espaces de noms et que vous utilisez PHP 5.3.3 ou, probablement, une plus grande , comme les constructeurs de style ancien ne fonctionne plus avec le code des espaces de noms - more info):
<?php
class Pants {
function Pants($a, $b, $c) { ... }
}
Si la classe n'a pas de constructeur et que vous souhaitez utiliser la réflexion, utilisez $class->newInstance()
au lieu de $class->newInstanceArgs(...)
. Pour faire ceci dynamiquement, cela ressemblerait à ceci:
$object = null === $class->getConstructor()
? $class->newInstance()
: $class->newInstanceArgs($args)
;
que se passe-t-il si la classe en question n'a pas de constructeur ?? –
trouvé la solution: $ object = null === $ class-> getConstructor()? $ class-> newInstance(): $ class-> newInstanceArgs (array (1, 2, 3)); –
Désolé, j'étais absent et j'ai raté votre commentaire. Je vais l'ajouter à la réponse pour l'exhaustivité. – Shabbyrobe