Hola a todos, estoy explorando el como crear un constructor en PHP que admita varios tipos de parametros y sin tener en cuenta el orden de ellos cuando son enviados para crear las propiedades.
He visto soluciones de o bien con el método __clone o creando un método que segun el número de parámetros recividos mandaba a un constructor o a otro.
Eso esta bien pero siempre no puedes alterar el orden de los parámetros y poniendo null si un parámetro intermedio no quieres darle valor.
Yo he hecho esto que me parece una solución pero no me acaba de satisfacer del todo y a ver si alguién tiene otro modo de hacerlo.
<?php
/*
Created on : 20-mar-2016, 20:25:15
Author : carlos
*/
class Objeto{
private $id;
private $nombre;
private $email;
/*
function __construct($id, $nombre, $email) {
$this->id = $id;
$this->nombre = $nombre;
$this->email = $email;
}
*/
public function constructor($arrayPropiedades){
foreach ($arrayPropiedades as $key =>$value){
if(property_exists(__CLASS__, $key)){
$this->$key = $value;
} else{
echo "No existe el atributo $var";
}
}
}
public function __get($var){
if(property_exists(__CLASS__, $var)){
return $this->$var;
} else {
return null;
}
}
//clase
}
//Esto es lo que no me gusta,
//tener que instanciar un objeto vacío primero
// para poder acceder al método.
$obj = new Objeto();
$obj2 = $obj->constructor(array('id' => 1,
'nombre' => 'carlos'));
//funciona
echo 'Id: '.$obj->id;
echo "Nombre: ".$obj->nombre;
He intentado crear un método static para acceder a él mediante el nombre de la clase. Pero claro, entonces da error en el $this del método constructor().
¿Alguién tiene una solución mas #compiGoguy?