Passer des arguments au Constructeur de la Classe
Comment puis-je passer d'un nombre arbitraire d'arguments du constructeur de classe à l'aide de l'Objet() la fonction définie ci-dessous?
<?php
/*
./index.php
*/
function Object($object)
{
static $instance = array();
if (is_file('./' . $object . '.php') === true)
{
$class = basename($object);
if (array_key_exists($class, $instance) === false)
{
if (class_exists($class, false) === false)
{
require('./' . $object . '.php');
}
/*
How can I pass custom arguments, using the
func_get_args() function to the class constructor?
$instance[$class] = new $class(func_get_arg(1), func_get_arg(2), ...);
*/
$instance[$class] = new $class();
}
return $instance[$class];
}
return false;
}
/*
How do I make this work?
*/
Object('libraries/DB', 'DATABASE', 'USERNAME', 'PASSWORD')->Query(/* Some Query */);
/*
./libraries/DB.php
*/
class DB
{
public function __construct($database, $username, $password, $host = 'localhost', $port = 3306)
{
//do stuff here
}
}
?>
OriginalL'auteur Alix Axel | 2009-04-23
Vous devez vous connecter pour publier un commentaire.
Bien que la nécessité d'utiliser la réflexion suggère que vous êtes quelque chose de compliquer à l'excès dans votre conception. Pourquoi voulez-vous écrire cette fonction en premier lieu?
BTW, que la Réflexion de la classe est vraiment à portée de main, est-il un cours intensif disponible sur les nouvelles fonctionnalités de PHP 5.3? J'ai vérifié le manuel PHP, mais est-ce moi ou il manque beaucoup de documentation?
Ce n'est pas vous: La documentation est plutôt rare. Vous aurez à faire avec php.net/oop5.reflection. Aussi, il a été autour depuis 5.1 (ou est-il 5.0?), il n'est donc pas une nouvelle fonctionnalité de 5,3
OriginalL'auteur troelskn
Au lieu de votre classe en tenant séparés de paramètres que j'aurais du prendre un tableau.
De cette façon, vous pouvez transmettre le résultat direct de la func_get_args dans votre constructeur. Le seul problème maintenant est d'être capable de comprendre le tableau de clés /valeurs.
Si quelqu'un a des idées, je serais également ravi de savoir 🙂
OriginalL'auteur The Pixel Developer
Je n'ai pas essayé, mais
call_user_func_array
sonne comme vous le souhaitez.Ont un coup d'oeil dans le La Documentation PHP.
À essayer sans nouvelle $classname().
Erreur fatale: Non méthode statique test::__construct() ne peut pas être appelée de façon statique
Bon, j'ai pas plus d'idées. Merci d'être prêt à essayer.
OriginalL'auteur staticsan
Une alternative à la méthode de réflexion, serait d'évaluer votre code.
OriginalL'auteur Syntaqx