Página 1 de 1

PHP acepta dos constructores?

Publicado: 11 Oct 2009, 20:02
por vinoamateur
O sea, me interesa tener un constructor vacío para instanciar un objeto y después el constructor con todas las propiedades. Esto para resolver un tema que es buscar un objeto en la BD a través de su id.
Gracias y saludos :wohow:

Re: PHP acepta dos constructores?

Publicado: 12 Oct 2009, 03:27
por elQuique
No, PHP no es como Java que soporta Sobrecarga, que es como se le llama a la posibilidad de tener múltiples constructores.

Igualmente, si bien esto no lo soporta el lenguaje puedes lograr algo similar con un poco de ingenio, pero no es lo mismo que Java o .Net

Dos de las formas:

Constructores Multiples en PHP basado en el número de argumentos

Código: Seleccionar todo

class Producto
{
private $_nombre;
private $_precio;

function __construct()
{
$args = func_get_args();
$nargs = func_num_args();
switch($nargs) 
case 1:
self::__construct1($args[0]);
break;
case 2:
self::__construct2($args[0], $args[1]);
break;
}
}
function __construct1($valor)
{
$this->_nombre = $valor;
}
function __construct2($valor1, $valor2)
{
$this->_nombre = $valor1;
$this->_precio = $valor2;
}
//.... etc, etc, ... si precisas mas cosas....
}
A ese ejemplo lo usas así:

Código: Seleccionar todo

$azucar = new Producto('Azucar 1kg');

$coke = new Prodcuto('Coca Cola 1LT', 1.50);
La función __construct tomará los parámetros y guarda en un Array con func_get_args(), y también contará el número de parámetros con func_num_args(), luego el switch ejecutara una de dos funciones auxiliares que llamé __construct1 y __construct2.

Constructores Multiples en PHP usando métodos estáticos

Código: Seleccionar todo

class Producto
{
private $_nombre;
private $_precio;

public static function crearNombre($nombre)
{
$producto = new Producto();
$producto->_nombre = $nombre;
return $producto;
}
public static function crearNombrePrecio($nombre, precio);
{
$producto = new Producto();
$producto->_nombre = $nombre;
$producto->_precio = $precio;
return $producto;
}
}
Reitero, en realidad es un truco, no es lo mismo que una sobrecarga real. Tienes que ver en cada caso que necesites cual es la mejor forma o incluso evitarlo, al menos hasta esperar estas y otras funciones de la POO en las próximas versiones de PHP.

Links:

Re: PHP acepta dos constructores?

Publicado: 12 Oct 2009, 10:13
por vinoamateur
Buenísimo Quique muchas gracias! Estoy probando una forma alternativa de solucionarlo que sería buscando en la BD x un dato ingresado por el usuario y luego creando el objeto pasándole como parámetros los datos traídos de la BD. En fin, como dices, si lo soluciono así intentaré no usar el truco de los constructores, sino, por ahora no tendré más remedio. Gracias y saludos.