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
PHP acepta dos constructores?
- vinoamateur
- Nivel 4
- Mensajes: 151
- Registrado: 13 Sep 2009, 18:47
- Twitter: @controlaltweb
- elQuique
- Moderador
- Mensajes: 2227
- Registrado: 05 May 2009, 18:43
- Twitter: @elQuique
- Ubicación: Florida, Uruguay
- Contactar:
Re: PHP acepta dos constructores?
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
A ese ejemplo lo usas así:
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
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:
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....
}
Código: Seleccionar todo
$azucar = new Producto('Azucar 1kg');
$coke = new Prodcuto('Coca Cola 1LT', 1.50);
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;
}
}
Links:
- vinoamateur
- Nivel 4
- Mensajes: 151
- Registrado: 13 Sep 2009, 18:47
- Twitter: @controlaltweb
Re: PHP acepta dos constructores?
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.