Sobrecarga constructor en php

Hoy les voy a mostrar como hacer sobrecarga en constructores en php. Una de las desventajas en php es que no permite los métodos sobrecargados y evidentemente los constructores. Pero hay una forma elegante de simularlo con métodos static y el operador self() de la siguiente manera

class Persona{
	private $nombre;
	private $apellido;
	private $telefono;
	private $nombreUsuario;

	static function soloNombreUsuario($nombreUsuario)
	{
		return new self('n','n','n',$nombreUsuario);
	}
	static function datosCompletos($nombre, $apellido, $telefono, $nombreUsuario)
	{
		return new self($nombre, $apellido, $telefono, $nombreUsuario);
	}
	private function __construct($nombre, $apellido, $telefono, $nombreUsuario) {
		$this->nombre = $nombre;
		$this->apellido = $apellido;
		$this->telefono = $telefono;
		$this->nombreUsuario = $nombreUsuario;
	}

}

Supongamos que quiero crear el objeto persona de dos formas diferente una pasando solo el nombre de usuario y que me cree los demas atributos a null y la otra forma pasando todos sus datos. Esto en Java, C++ , C# es fácil haces dos constructores, pero en php5 eso no está permitido. Y la manera de simularlo es con métodos static que me retornen el objeto. Como se puede observar en el código anterior el constructor es private lo que significa que no puedo acceder a el cuando creo el objeto.

Para crear un objeto persona seria

$persona = Persona::soloNombreUsuario(‘nombre_usuario’)

lo que me creara un objeto persona solo con el nombre de usuario y los demas atributos con un valor por defecto, o a null o como quieras iniciar.

o bien pasando todos sus parametros

$persona = Persona::datosCompletos(‘juan’,’gonzalez’,’33333333′,’juanGonzalez’)

Anuncios

Un pensamiento en “Sobrecarga constructor en php

  1. Muchas Gracias amigo, muy claro tu Post y era lo que necesitaba, porque creaba dos constructores, uno inicializando valores y otro pasando parámetros (como se hace en java) pero me salía error y gracias tu post me quedo claro que no se permite, y sabes la respuesta, es decir, el porqué no se puede hacer dos __construct()

    GRACIAS!!!! +10

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s