2010-02-21 5 views
1

Existe-t-il une fonction que je peux utiliser pour instancier un objet avec des arguments?Fonction pour créer des objets?

#include <database.h> 
class database 
{ 
    function __construct($dbhost, $user, $pass, $etc) { /* etc */ } 
    function query($sql) { /* dowork*/ } 
} 
$args = array('localhost', 'user', 'pass', 'etc'); 

$db = create_object('database', $args); // is there a function like this? 
$db->query('SELECT * FROM poop'); 
+0

+1: Bienvenue sur stackoverflow :) – Sarfraz

+1

'' #include ? Est-ce que c'est PHP ou C ici? –

+1

"#include" ne fonctionne pas de la même manière en PHP qu'en C ou C++. Vous voulez probablement dire "include" database.h '; " ou, mieux encore, "require_once 'database.h';" – amphetamachine

Répondre

1

Vous pouvez utiliser ReflectionClass::newInstanceArgs pour cela:

class database 
{ 
    function __construct($dbhost, $user, $pass, $etc) { /* etc */ } 
    function query($sql) { /* dowork*/ } 
} 
$args = array('localhost', 'user', 'pass', 'etc'); 

$ref = new ReflectionClass('database'); 
$db = $ref->newInstanceArgs($args); 
+0

oui c'est bien d'utiliser la classe de réflexion, mais elle échoue si les arguments sont passés par referecne. – Sarfraz

+0

Qu'est-ce qui échouerait exactement? –

+2

@Sarfraz: Cela n'échouerait pas. Dans l'exemple ci-dessus, il passe par valeur de toute façon ... Mais si vous voulez passer par référence en utilisant l'exemple ci-dessus, vous devez juste vous assurer qu'une référence de votre variable est insérée dans $ args au lieu de la variable lui-même. ('$ args = array ($ parValue, & $ byReference);') –

Questions connexes