> Faqs > Mismo número de parámentros, distintos parámetros en sobrecarga PHP

Mismo número de parámentros, distintos parámetros en sobrecarga PHP

Me surge una duda con respecto al artículo de sobrecarga de constructores en PHP. Perdón si es muy obvia soy programador junior aún.

He comprendido el artículo pero me surge la siguiente duda: Si el sistema en que se nombran los constructores se basan en el número de parámetros que son dados como input, ¿qué ocurre con los posibles constructores que usan el mismo número de parámetros pero son diferentes?

Por remitirme al ejemplo expuesto, con las propiedades $nombre y $equipo, __construct1 acepta como parametro nombre, pero ¿y si quiero un constructor que acepte como único parámetro equipo?

No se si la pregunta es muy boba o no tiene sentido pero me ha surgido y a ver si me pueden ayudar.

Gracias de antemano. Un saludo

Respuestas

El artículo que mencionas expone una triquiñuela para imitar la sobrecarga de constructores en PHP. Esta sobrecarga realmente no la entrega el lenguaje, por lo que no deja de ser un simple truco o camino para "imitar sobrecarga en PHP". Por tanto, partimos de la base que este tipo de sobrecarga no existe en el lenguaje y todo lo que se puede hacer es algo limitado.

Ahora con respecto a cuando tienes el mismo número de parámetros en un constructor, mediante sobrecarga en PHP no se puede saber muy bien qué parámetro estás enviando. En otros lenguajes, puedes hacer sobrecarga con un mismo número de parámetros cuando éstos tienen distintos tipos. Un lenguaje tipado como Java o C# es capaz de saber qué constructor se debe de ejecutar, viendo el tipo del parámetro que se está enviando. Pero esto no es posible en PHP.

Por tanto, para sobrecarga de un constructor con un único parámetro en PHP, que a veces puede ser una cosa (el nombre) y a veces puede ser otra (el equipo), no se puede hace nada en especial. Si necesitas hacer algo como eso podrías simplemente hacer dos pasos para consrtuir tu objeto. El primero lo construyes con "new" y en el segundo paso le envías los datos que necesitas cargarlo.

Puedes tener por ejemplo un método inicializar que recibe los datos en un array asociativo, para que los datos se sepa bien qué son.

$jugador = new Jugador();
$jugador->inicializar([
    'nombre' => 'Pepe',
]);

Podrías llamarlo también así:

$jugador = new Jugador();
$jugador->inicializar([
    'equipo' => 'Rojo',
]);

O así...

$jugador = new Jugador();
$jugador->inicializar([
    'nombre' => 'Pepe',
    'equipo' => 'Rojo',
]);
María
187 4 17 10