Anuncios

Bienvennidos sean a este post, hoy veremos una funcion de PHP.

Anuncios

Esta funcion nos devuelve el resultado de un llamado a una funcion de callback, veamos su sintaxis:

call_user_func(callback[, argumentos]);
Anuncios

El primer parametro sera la funcion de callback que llamaremos para obtener el resultado devuelto por la misma, como opcional podemos pasar los argumentos que necesitemos para la funcion que llamamos anteriormente. Para entender el concepto vamos a analizar el siguiente ejemplo:

<?php

function sumar($a, $b)
{
        return $a + $b;
}

echo call_user_func("sumar", 10, 20) . "\n";

?>
Anuncios

Primero definimos una funcion llamada sumar que recibira dos valores y devolvera la suma de ambos. En el codigo mostraremos el resultado de usar a call_user_func. Para ello primero le pasamos la funcion anterior, luego los dos valores para los argumentos de la funcion. Ejecutemos para ver como es su salida:

$ php call.php
30
$
Anuncios

Como pueden ver realizo la operacion de la funcion. Tomemos el codigo y realicemos la siguiente modificcacion:

<?php

function incrementar(&$var)
{
        ++$var;
}

$a = 0;
call_user_func("incrementar", $a);
echo $a . "\n";

?>
Anuncios

En este caso, tenemos un argumento de tipo referencia e incrementamos el valor recibido. Por fuera, definimos una variable y la pasaremos como argumento a call_user_func y como callback a la nueva funcion. Para finalmente, mostrar el valor de $a. Compilemos y veamos como es la salida:

$ php call.php
PHP Warning:  incrementar(): Argument #1 ($var) must be passed by reference, value given in /home/tinchicus/lenguajes/php/c/call.php on line 9
0
$
Anuncios

No nos dio un error pero si un aviso. En este caso, nos informa que el valor informado debe ser pasado como referencia. Por lo tanto, no recibio ningun valor y no pudo procesarlo y eso lo comprobamos con el valor de $a. Este es un problema de esta funcion, para comprobarlo debemos tomar el codigo anterior y buscar la siguiente linea:

call_user_func("incrementar", $a);
Anuncios

Y modificarla de la siguiente manera:

incrementar($a);
Anuncios

Aqui haremos un llamado directo a la funcion y le pasamos el mismo parametro, observen que no agregamos nada mas, y si lo compilan y ejecutan tendran la siguiente salida:

$ php call.php
1
$
Anuncios

Como pueden ver funciono perfectamente, realizando la tarea pensada originalmente. Volvamos al codigo anterior y hagamos las siguientes modificaciones:

<?php

function saludar($nombre)
{
        echo "Hola, $nombre! Como estas?\n";
}

call_user_func("saludar","tinchicus");

?>
Anuncios

Ahora tenemos una funcion para saludar. La cual recibira el nombre para realizar el saludo, y esta accion la mostraremos mediante un mensaje con echo. Por fuera, haremos un llamado a call_user_func y le pasaremos nuevamente la funcion y el dato. Si lo ejecutan obtendran esta salida:

$ php call.php
Hola, tinchicus! Como estas?
$
Anuncios

Ya vimos como podemos devolver un valor, como mostrar un texto asi como tambien no podemos trabajar con valores de tipo referencia. Pero esto no se acaba porque tambien podemos trabajar de la siguiente manera:

<?php

class miClase
{
        static function saludar($nombre)
        {
                echo "Hola, $nombre!! Como estas?\n";
        }
};

$clase = "miClase";
$objeto = new miClase();

call_user_func(array($clase,"saludar"),"tinchicus");
call_user_func($clase . "::saludar","Martin");
call_user_func(array($objeto, "saludar"),"Miranda");

?>
Anuncios
Anuncios

En esta ocasion, primero definimos una clase que contendra una version estatica de la funcion saludar que teniamos anteriormente. Es exactamente lo mismo pero ahora esta en la clase. Por fuera, definimos una variable que posee el nombre de la clase y luego definimos un objeto de la clase, ya veremos para que. Para la primer llamada usaremos a array para pasar un array de dos valores. El primero sera la variable con el nombre de la clase y el nombre del metodo a ejecutar. Por fuera pasaremos el parametro que debemos pasar al metodo. La siguente linea efectua otro llamado donde usamos nuevamente a la variable donde lo concatenamos con el operador de resolucion de nombres seguido del nombre del metodo. Y nuevamente pasamos el parametro que necesita el metodo para mostrarlo. Por ultimo, hacemos un tercer llamado donde usaremos un array nuevamente pero ahora pasaremos el objeto de nuestra clase y el nombre del metodo. Pasamos el argumento seguido al array tal como hicimos la primera vez pero en lugar de usar la clase pasamos un objeto. Si lo ejecutamos debemos obtener una salida como la siguiente:

$ php call.php
Hola, tinchicus!! Como estas?
Hola, Martin!! Como estas?
Hola, Miranda!! Como estas?
$
Anuncios

En resumen, hoy hemos visto a call_user_func, que es, para que sirve, como se utiliza, y algunos ejemplos para poder verlo en accion. Espero les haya resultado de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donatión

It’s for site maintenance, thanks!

$1.50