PHP - Duda sobre constructor múltiple

 
Vista:
Imágen de perfil de Álvaro
Val: 65
Ha disminuido su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Duda sobre constructor múltiple

Publicado por Álvaro (22 intervenciones) el 24/11/2019 14:40:58
Buenod días / tardes, estoy continuando con el proyecto de la tienda de libros online, progresando todo lo que pueda. He implementado hace poco objetos, añadiendo la clase Usuario, donde guardo las funciones para registrarse (de momento en el XML y más adelante en la base de datos) y ahora de iniciar sesión. La cuestión es que el registro lo tengo planteado de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (isset($_POST["nombre"]) && isset($_POST["password"]) && isset($_POST["direccion"]) && isset($_POST["fechaNacimiento"]) && isset($_POST["email"])) {
        if (isset($_POST['registro'])){
            $nombreUsuario = $_POST["nombre"];
            $email = $_POST["email"];
            $contrasenya = $_POST["password"];
            $direccion = $_POST["direccion"];
            $fechaNacimiento = $_POST["fechaNacimiento"];
            $usuario = new Usuario($nombreUsuario, $contrasenya, $email, $direccion, $fechaNacimiento);
 
            if (validacionNombre($nombreUsuario) && validacionEmail($email) && !usuarioExiste($email) && strlen($contrasenya) >= 4) {
 
                $usuario->registrarse();
 
            } else {
                $failedRegister = "<div class='alert alert-warning'>Ha ocurrido un error inesperado. Vuelva a intentarlo</div>";
            }
        }

Tras unas comprobaciones que no vienen al caso ahora mismo (ya que me funcionan), creo el objeto $usuario pasando por parámetro los datos recogidos mediante el formulario. Aquí dejo el constructor de la clase Usuario:

1
2
3
4
5
6
7
8
public function __construct($name, $password, $emailAddress, $address, $birthDate) //PARA REGISTRO
    {
        $this->nombre = $name;
        $this->contrasenya = $password;
        $this->email = $emailAddress;
        $this->direccion = $address;
        $this->fechaNacimiento = $birthDate;
    }

Hasta aquí todo correcto. Sin embargo, la cosa cambia cuando quiero iniciar sesión, obviamente recurriendo a otro formulario, y por ende, creando un objeto distinto. Para ello necesitaría otro constructor, de la manera que yo lo estoy planteando, pero por lo que he visto, PHP no soporta diversos constructores, cosa que Java sí. Navegando por Internet vi el siguiente ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class myClass {
    public function __construct() {
        $get_arguments       = func_get_args();
        $number_of_arguments = func_num_args();
 
        if (method_exists($this, $method_name = '__construct'.$number_of_arguments)) {
            call_user_func_array(array($this, $method_name), $get_arguments);
        }
    }
 
    public function __construct1($argument1) {
        echo 'constructor with 1 parameter ' . $argument1 . "\n";
    }
 
    public function __construct2($argument1, $argument2) {
        echo 'constructor with 2 parameter ' . $argument1 . ' ' . $argument2 . "\n";
    }
 
    public function __construct3($argument1, $argument2, $argument3) {
        echo 'constructor with 3 parameter ' . $argument1 . ' ' . $argument2 . ' ' . $argument3 . "\n";
    }
}
 
$object1 = new myClass('BUET');
$object2 = new myClass('BUET', 'is');
$object3 = new myClass('BUET', 'is', 'Best.');

La idea me pareció bastante clara y muy sencilla, sin embargo, no me funciona. Agradecería cualquier ayuda / consejo para este problema, o algún otro modo de realizar el login.

Muchas gracias, y un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda sobre constructor múltiple

Publicado por joel (1269 intervenciones) el 25/11/2019 08:45:33
Hola Álvaro tal y como comentas, PHP solo soporta un constructor... pero tu problema creo que es que quieres utilizar el constructor para el alta de un usuario cuando eso creo que seria incorrecto.

El constructor de la clase usuario, es para recibir parámetros genéricos que pueda necesitar la clase usuario (por ejemplo un objeto de base de datos), y luego para añadir un usuario tienes que crear el método para ello, igual que tienes que crear un metido para la consulta, validación, eliminación, etc... creo que es incorrecto utilizar un constructor para cualquiera de ellos...

Espero que te ayude.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar