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: