Estoy en una situación en la que necesito instanciar una clase con argumentos de una instancia de otra clase. Aquí es el prototipo:PHP: cómo crear una instancia de una clase con argumentos de otra clase
//test.php
class test
{
function __construct($a, $b, $c)
{
echo $a . '<br />';
echo $b . '<br />';
echo $c . '<br />';
}
}
Ahora, necesito crear una instancia superior a la clase mediante el siguiente cls de clase función:
class myclass
{
function cls($file_name, $args = array())
{
include $file_name . ".php";
if (isset($args))
{
// this is where the problem might be, i need to pass as many arguments as test class has.
$class_instance = new $file_name($args);
}
else
{
$class_instance = new $file_name();
}
return $class_instance;
}
}
Ahora cuando intento crear una instancia de clase de prueba, mientras que el paso de argumentos a ella:
$myclass = new myclass;
$test = $myclass->cls('test', array('a1', 'b2', 'c3'));
da error: Falta argumento 1 y 2; solo se pasa el primer argumento.
Esto funciona bien si instalo una clase que no tiene argumentos en su función de constructor.
Para desarrolladores experimentados de PHP, lo anterior no debería ser un gran problema. Por favor ayuda.
Gracias
No relacionado con su pregunta, pero $ args siempre será 'isset' ya que asigna array() en la definición de la función. Puede estar interesado en 'empty', o' $ args = null'. – Tordek
Lo siento, esto tampoco está relacionado con su pregunta, pero lo que está haciendo no es genial. la respuesta a su pregunta es: deje que su constructor tome una matriz, tenga algunos atributos de clase, luego procese la matriz y asóciela a los atributos de la clase. Pero, de nuevo, estás haciendo algo que no es genial. – DarthVader
la clase de prueba y otras deben ser creadas por otros desarrolladores que usan su propio estilo con argumentos y sin él, por lo que no quiero restringirlos solo para pasar argumentos como matriz a los constructores. – Sarfraz