PHP – Invocar función usando nombre como cadena

En este post te enseñaré cómo llamar a una función o método de PHP a través de su nombre contenido dentro de una cadena

Es decir, tener una cadena con el nombre de la función e invocar la función con ese nombre a partir del objeto o de manera global.

Te enseñaré  varios ejemplos: uno para invocar a un método de un objeto y otro para llamar a una función global con distintas técnicas.

Invocar método de objeto

Supongamos que tienes un objeto que creaste a partir de una clase en PHP y quieres invocarlo según lo que contenga una cadena. Quedaría así:

<?php
class Mascota
{
    public function ladrar()
    {
        echo "woof";
    }

    public function comer()
    {
        echo "yum";
    }
}

$m = new Mascota();

$nombreFuncion = "ladrar";
$m->$nombreFuncion();

En este caso estoy indicando el nombre del método en la cadena de la línea 17. Y luego utilizo ->$nombreFuncion() usando la variable.

También le puedes pasar argumentos si quieres, pero debes saber la cantidad de argumentos a pasar. Si el número de argumentos es variable, mira los siguientes ejemplos.

Función global

Puedes invocar a una función global según su nombre. Por ejemplo:

<?php
$funcion = "print_r";
$arreglo = [1, 2, 3];
$funcion($arreglo);

En este caso le asigno a $funcion el nombre de print_r, función nativa de PHP. Y después simplemente invoco a $funcion pasándole el argumento que le pasaría a print_r.

call_user_func_array

Existe una función que llama a una función pasándole argumentos a partir de un arreglo. Esto funciona cuando el número de argumentos de la función es variable y tenemos que llenar un arreglo con ellos dependiendo de cada cosa.

Veamos un ejemplo. Para usar printf por ejemplo con dos argumentos la sintaxis es:

printf("Hola %s", "Luis");

En este caso el primer argumento es el formato y el segundo los argumentos de la función. Usando call_user_func_array quedaría así:

<?php
call_user_func_array("printf", ["Hola %s", "Luis"]);

El primer argumento es el nombre de la función, y el segundo es un arreglo con todos los argumentos con los que llamaríamos a la función.

Desempacado de variables

Finalmente veamos una alternativa a call_user_func_array, lo que cambia ahora es que invocamos a una función por su nombre pasando los argumentos como arreglo, pero sin call_user_func_array.

El ejemplo anterior quedaría así:

<?php
$argumentos = ["Hola %s", "Luis"];
$nombreFuncion = "printf";
$nombreFuncion(...$argumentos);

En este caso desempacamos los argumentos del arreglo (usando ...$arreglo) y se los pasamos a la función. De este modo el número de argumentos será variable pero ya no necesitamos call_user_func_array.

Conclusión

Así es como podemos llamar a funciones de PHP a través de una cadena. Aquí te dejo un enlace sobre call_user_func_array y aquí un enlace para leer más sobre PHP.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *