PHP acepta dos constructores?


HTML, CSS, PHP, JavaScript, Java... tus dudas por aquí...
   

PHP acepta dos constructores?

Notapor vinoamateur » Oct 2009, 20:02

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:
Avatar de Usuario
vinoamateur
Nivel 4
 
Mensajes: 151
Registrado: Sep 2009, 18:47
Twitter: @controlaltweb



Re: PHP acepta dos constructores?

Notapor elQuique » Oct 2009, 03:27

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:
Avatar de Usuario
elQuique
Moderador
 
Mensajes: 2010
Registrado: May 2009, 18:43
Ubicación: Florida, Uruguay
Twitter: @elQuique

Re: PHP acepta dos constructores?

Notapor vinoamateur » Oct 2009, 10:13

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.
Avatar de Usuario
vinoamateur
Nivel 4
 
Mensajes: 151
Registrado: Sep 2009, 18:47
Twitter: @controlaltweb


Volver a Programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados