Programación

19/08/2011

PHP – Funciones

Funciones en PHP, este resumen debería haberlo hecho un par de post antes, pero se me paso, así que mas vale tarde que nunca! Espero que lo sigan disfrutando y que les interese este tipo de post! Mientras alguien lo lea ya estoy feliz.

Funciones definidas por el usuario

Simplemente son las funciones que nosotros vamos a ir definiendo,  cualquier código PHP valido puede ser incluido dentro de la función, hasta podemos incluir otra funciones y definiciones de clases (el tema clases lo veremos mas adelante)

function foo($arg_1, $arg_2, /* ..., */ $arg_n='')
{
    echo "Función de ejemplo.\n";
    return $valordevuelto;
}

Las reglas para nombres de funciones son las mismas que utilizamos en las etiquetas. Comienza con una letra o guión bajo, seguido por letra, numero o guiones bajos, sin importar la cantidad. Se puede validar con la siguiente expresión regular [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

A diferencia de otros lenguajes, en PHP no se necesita definir la función antes de que se haga referencia, excepto que dicha función esta condicionada, acá un ejemplo.

$haceralgo = true;

/* No podemos llamar a foo() desde aquí
   ya que no existe aún,
   pero podemos llamar a bar() */

bar();

if ($haceralgo) {
  function foo()
  {
    echo "No existo hasta que la ejecución del programa llegue hasta mí.\n";
  }
}

/* Ahora podemos llamar de forma segura a foo()
   ya que $haceralgo se evaluó como verdadero */

if ($haceralgo) foo();

function bar()
{
  echo "Existo desde el momento inmediato que comenzó el programa.\n";
}

No existe sobrecarga de funciones, tampoco se puede “desdefinir” ni predefinir una función previamente declarada.

También se puede llamar a funciones recursivas, acá un ejemplo:

function recursividad($a)
{
    if ($a < 20) {
        echo "$a\n";
        recursividad($a + 1);
    }
}

Mas información -> Link

Argumentos de funciones

Se le pueden pasar argumentos a las funciones, estos son pasados por una lista separados por coma, se les pueden enviar por valor (por defecto), por referencia y valores predeterminados.

Ejemplo enviado por valor: Al pasar los argumentos por valor, si dicho argumento cambia de valor dentro de la función, no sera cambiado fuera de la función.

function tomar_matriz($entrada)
{
    echo "$entrada[0] + $entrada[1] = ", $entrada[0]+$entrada[1];
}

Ejemplo enviado por referencia: Al pasar un argumento por referencia, si dicho argumento cambia de valor dentro de la función, al salir de la misma la variable contendrá el nuevo valor obtenido dentro de la función.

function añadir_algo(&$cadena)
{
    $cadena .= 'y algo más.';
}
$cad = 'Esto es una cadena, ';
añadir_algo($cad);
echo $cad;    // imprime 'Esto es una cadena, y algo más.'

Ejemplo valores predeterminados: Los argumentos predeterminados, serán usados si es que dicho argumento no es pasado a la función.

function hacercafé($tipo = "capuchino")
{
    return "Hacer una taza de $tipo.\n";
}
echo hacercafé();
echo hacercafé(null);
echo hacercafé("espresso");

Los valores predeterminados, NO puede ser una variable,  un miembro de una clase, o una llamada a una función. Ademas, los argumentos con valores predeterminados deberán estar a la derecha de TODOS los argumentos con valores no predeterminados.

Mas información -> Link

Retorno de Valores

Las funciones pueden devolver valores, para lograr esto debemos usar la sentencia return, esto causa la interrupción inmediatamente de dicha la función

Ejemplo:

function cuadrado($núm)
{
    return $núm * $núm;
}
echo cuadrado(4);   // imprime '16'.

Mas información -> Link

Funciones Variables

PHP soporta las  funciones variables. Si una variable tiene paréntesis anexos a él, PHP buscará una función con el mismo nombre e intentará ejecutarla. Las funciones variables se puede usar para implementar llamadas de retorno, tablas de funciones, etc.

function foo() {
    echo "En foo()
\n";
}

function bar($arg = '')
{
    echo "En bar(); el argumento era '$arg'.
\n";
}

// Esta es una función de envoltura alrededor de echo
function hacerecho($cadena)
{
    echo $cadena;
}

$func = 'foo';
$func();        // Esto llama a foo()

$func = 'bar';
$func('prueba');  // Esto llama a bar()

$func = 'hacerecho';
$func('prueba');  // Esto llama a hacerecho()

Mas información -> Link

Funciones Internas -> Link

Funciones Anónimas

Estas funciones, también conocidas como closures,  nos permiten crear funciones que no poseen un nombre especificado. Dichas funciones son útiles como valores de los parámetros de llamadas de retorno, entre otras cosas.

Ejemplo:

echo preg_replace_callback('~-([a-z])~', function ($coincidencia) {
    return strtoupper($coincidencia[1]);
}, 'hola-mundo');
// imprime holaMundo

Dichas funciones tambien se pueden utilizar como valores de una variable, PHP convierte dichas expresiones en instancias de la clase interna.

Ejemplo:

$saludo = function($nombre)
{
    printf("Hola %s\r\n", $nombre);
};

$saludo('Mundo');
$saludo('PHP');

Las funciones anónimas, también pueden heredar variables de una clase padre.

Las funciones anónimas están disponibles a partir de PHP 5.3.0

Ejemplo:

class Carro
{
    const PRECIO_MANTEQUILLA = 1.00;
    const PRECIO_LECHE       = 3.00;
    const PRECIO_HUEVOS      = 6.95;

    protected $productos = array();

    public function añadir($producto, $cantidad)
    {
        $this->productos[$producto] = $cantidad;
    }

    public function obtenerCantidad($producto)
    {
        return isset($this->productos[$producto]) ? $this->productos[$producto] :
               FALSE;
    }

    public function obtenerTotal($impuesto)
    {
        $total = 0.00;

        $llamadaDeRetorno =
            function ($cantidad, $producto) use ($impuesto, &$total)
            {
                $precioUnidad = constant(__CLASS__ . "::PRECIO_" .
                    strtoupper($producto));
                $total += ($precioUnidad * $cantidad) * ($impuesto + 1.0);
            };

        array_walk($this->productos, $llamadaDeRetorno);
        return round($total, 2);
    }
}

$mi_carro = new Carro;

// Añadir algunos artículos al carro
$mi_carro->añadir('mantequilla', 1);
$mi_carro->añadir('leche', 3);
$mi_carro->añadir('huevos', 6);

// Imprimir el total con un impuesto de venta del 5%.
print $mi_carro->obtenerTotal(0.05) . "\n";
// El resultado es 54.29
?>

Mas información -> Link

Espero que les sea útil este pos explicando todo sobre las funciones en PHP.

Saludos! Y espero sus comentarios!



About the Author

AgeValed
Pablo Ignacio de la Vega Ibañez, también conocido en algunos lugares como AgeValed, el creador de este blog. Actualmente estoy trabajando como Líder Técnico y Supervisor de Equipo en el área de desarrollo PHP.




 
 

 
PHP

Doctrine2 – Getting Started Issues

Luego de querer instalar y hacer funcionar doctrine en nuestro querido y amado Windows, me encontré con un par de problemas, y por lo que vi en internet a varios le paso lo mismo, vamos a tomar como ejemplo el Doctrine –...
by AgeValed
1

 
 
PHP

Zend Framework – Almacenamiento de sesión en base de datos

En este mini tutorial voy a mostrarles como guardar la sesión en base de datos con ZF 1, esto es muy util para manejo de sesiones en un entorno con múltiples servidores. Material Relacionado Zend_Session_SaveHandler_DbTable Z...
by AgeValed
0

 
 

PHP Conference Argentina 2013

El 4 y 5 de Octubre se celebrará, en la Ciudad de Buenos Aires (Argentina), la PHP Conference Argentina, edición local de la conferencia PHP más popular. Esta edición no solamente está destinada a los programadores PHP, ...
by AgeValed
0

 

 

PHP 5.4.0 liberado!

Les comento que ya se encuentra la nueva versión de PHP liberada, la versión 5.4.0, luego de varios updates que se hicieron a la versión PHP 5.3 ya contamos con nuevas versión que incluye (según ellos) un gran núme...
by AgeValed
0

 
 
PHP

PHP – Errores

En este resumen voy a escribir sobre los el control y registro de los errores en PHP. PHP nos permite definir nuestras reglas para controlar los errores, crear errores personificados o como serán registrados/notificados. Tipos...
by AgeValed
0

 




0 Comentarios


Be the first to comment!


Deja un comentario

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

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.