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'));//funcionaecho '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?
Hola!
En programación orientada a objetos para poder acceder a un objeto primero tienes que crear una instancia del objeto. La línea $obj = new Objeto(); sirve aquí para instanciar un objeto. Sin crear una instancia de un objeto no se puede acceder a él.
La otra opción sería una clase donde definas métodos y funciones estáticas. En ese caso no necesitarás crear una instancia del objeto previamente (pero por otro lado te estarás alejando de lo que se supone es la programación orientada a objetos).
Ejemplo:
<?phpclass Hello{ private static $greeting = 'Hola a todos'; private static $initialized = false; private static function initialize() { if (self::$initialized) return; self::$greeting .= ' amigos!'; self::$initialized = true; } public static function greet() { self::initialize(); echo self::$greeting; }}Hello::greet(); // Hola a todos amigos!?>
Saludos!