Übergeben von Argumenten an den Konstruktor der Klasse
Wie kann ich übergeben eine beliebige Anzahl von Argumenten an den Konstruktor der Klasse mit dem Objekt () - Funktion unten definiert?
<?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
}
}
?>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl die Notwendigkeit der reflektion verwenden, deutet darauf hin, dass Sie overcomplicating etwas in Ihrem design. Warum wollen Sie schreiben, diese Funktion in Erster Linie?
Statt Ihre Klasse unter getrennten Parametern würde ich es haben, nehmen Sie ein array.
Diese Weise können Sie die direkte Folge der func_get_args in den Konstruktor. Das einzige problem jetzt ist, in der Lage, um herauszufinden, die array-Schlüssel /- Werte.
Wenn jemand irgendwelche Ideen hat, würde ich auch gerne wissen 🙂
Habe ich noch nicht ausprobiert, aber
call_user_func_array
klingt wie Sie wollen.Haben einen Blick in die In der PHP-Dokumentation.
Alternative für die Reflexion der Methode, wäre bewerten Sie Ihre code.