Cómo asegurarnos en PHP que una función recibe el parámetro correcto

Imagina una función que envía un mensaje:

function enviarMensaje(string $mensajeCifrado)
{
    echo "Mensaje cifrado enviado: $mensajeCifrado\n";
}

Esta función espera que le llegue un mensaje cifrado. Pero ¿qué pasaría si, por error, le pasamos un mensaje sin cifrar? Estaríamos cometiendo un error grave aunque el programa funcionaría sin fallos.

Por ejemplo, esto funcionaría a la perfección:

enviarMensaje("Mensaje sin cifrar");

Entonces ¿cómo puede saber si el mensaje que le llega está cifrado o no? Al fin y al cabo lo que espera recibir es una cadena y no hace ninguna comprobación.
Pues una forma sencilla de solucionar el problema es aprovechar el «Type Casting» de PHP; Podemos crear una clase para crear mensajes encriptados y usarla como parámetro en nuestra función.

La clase podría ser algo así (con un absurdo sistema de encriptación):

class MensajeCifrado
{
    private $mensaje;

    public function __construct($mensaje)
    {
        $this->mensaje = strrev($mensaje);
    }

    public function get()
    {
        return $this->mensaje;
    }
}

NOTA: strrev() da la vuelta a una ceda.

Y ahora solo falta modificar nuestra función para que solo acepte este tipo de parámetro:

function enviarMensajeSegura(MensajeCifrado $mensajeCifrado)
{
    echo "Mensaje cifrado enviado: " . $mensajeCifrado->get() . "\n";
}

Con ésto ya tendríamos una función a la que seguro que siempre le va a llegar un mensaje cifrado. Ya no podemos hacer ésto:

enviarMensaje("Mensaje sin cifrar"); // Esto ya no funciona

Para que funcione correctamente tenemos que pasar el tipo de parámetro correcto:

enviarMensajeSegura(new MensajeCifrado("Mensaje sin cifrar"));

1 comentario en “Cómo asegurarnos en PHP que una función recibe el parámetro correcto”

Me siento solo, dime algo...