Muchas veces, cuando trabajamos en el desarrolo de una aplicación, nos surge la necesidad de ejectar un mismo bloque de código en diferentes partes de nuestra aplicación. Una Función no es más que un bloque de código al que le pasamos una serie de parámetros y nos devuelve un valor. Como todos los lenguaje de programación, PHP trae una gran cantidad de funciones para nuestro uso, pero las funciones más importantes son las que nosotros creamos.

Para declara una funcion debemos utilizar la instrucción function seguido del nombre que le vamos a dar, y después entre parentesis la lista de argumentos separados por comas, aunque también habrá funciones que no recogan ningún argumento.

function nombre_de_funcion (arg_1, arg_2, …, arg_n)

{

bloque de código

}

Cualquier instrucción válida de PHP puede aparecer en el cuerpo (lo que antes hemos llamado bloque de código) de una función, incluso otras funciones y definiciones de clases.

En PHP no podemos redefinir una función previamente declarada, y además en PHP3, las funciones deben definirse siempre antes de que se invoquen, en PHP4 este requerimiento ya no existe.

La instrucción RETURN

Cuando invocamos una función, la ejecución del programa pasa a ejecutar las líneas de código que contenga la función, y una vez terminado, el programa continua su ejecución desde el punto en que fué llamada la función.

Existe una manera de terminar la ejecución de la función aunque aún haya código por ejecutar, mediante el uso de la instrución return terminamos la ejecución del código de una función y devolvemos un valor. Podemos tener varios return en nuestra función, pero por lo general, cuantos más return tengamos menos reutilizable será nuestra función.

<?php

function mayor ($x, $y)

{

if ($x > $y) {

return $x.” es mayor que “.$y;

} else {

return $y.” es mayor que “.$x;

}

}

?>

Aunque quedariá mejor:

<?php

function mayor ($x, $y)

{

$msg = “”;

if ($x > $y) {

$msg = $x.” es mayor que “.$y;

} else {

$msg = $y.” es mayor que “.$x;

}

return $msg;

}

?>

Con la instrución return puede devolverse cualquier tipo de valor, incluyendo tablas y objetos. PHP solo permite a las funciones devolver un valor, y para solventar este pequeño problema, si queremos que nuestra función devuelva varios tenemos que utilizar una tabla (array).

Parámetros de las funciones

Existen dos formas de pasar los parámetros a una función, por valor o por referencia.

Cuando pasamos una variable por valor a una funcion, ocurra lo que ocurra en ésta en nada modificará el contenido de la variable. Mientras que si lo hacemos por referencia, cualquier cambio acontecido en la función sobre la variable lo hará para siempre.

En PHP, por defecto, las variables se pasan por valor. Para hacerlo por referencia debemos anteponer un ampersand (&) a la variable.

<?php

function suma ($x, $y)

{

$x = $x + 1;

return $x+$y;

}

$a = 1;

$b = 2;

//parámetros por valor

echo suma ($a, $b); // imprimirá 4

echo $a; // imprimirá 1

//parámetros por referencia

echo suma (&$a, $b); // imprimirá 4

echo $a; //imprimirá 2

?>

Si queremos que un parámetro de una función se pase siempre por referencia debemos anteponer un ampersand (&) al nombre del parámetro en la definición de la función.

En PHP podemos definir valores por defecto para los parámetro de una función. Estos valores tienen que ser una expresión constante, y no una variable o miembro de una clase. Además cuando usamos parámetros por defectos, éstos deben estar a la derecha de cualquier parámetro sin valor por defecto, de otra forma PHP nos devolverá un error.

<?php

function suma ($x=1, $y)

{

$x = $x + 1;

return $x+$y;

}

?>

Si ejecutarmos esta función nos daría error, ya que hemos dado a $x el valor 1 por defecto y la hemos colocado a la izquierda de un parámetro que no tiene valor por defecto. La forma correcta es:

<?php

function suma ($y, $x=1)

{

$x = $x + 1;

return $x+$y;

}

?>

Cabe destacar que PHP3 no soporta un número variables de parámetros, pero PHP4 sí.

Llegados a este punto, damos un paso atrás y volvemos a las variables, para distinguir entre variables estáticas (static) y globales (global). Las variables estáticas se definen dentro de una función, la primera vez que es llamada dicha función la variable se inicializa, guardando su valor para posteriores llamadas.

<?php

function contador ()

{

static $count = 0;

$count = $count + 1;

return $count;

}

echo contador().”<BR>”; // imprimirá 1

echo contador().”<BR>”; // imprimirá 2

echo contador().”<BR>”; // imprimirá 3

?>

Las variables globales, no se pueden declarar dentro de una función, lo que hacemos el llamar a una variable que ya ha sido declarada, tomando el valor que tenga en ese momento, pudiendo se modificado en la función.

<?php

var $a = 1;

function ver_a()

{

global $a;

echo $a.”<BR>”; // imprimirá el valor de $a

$a += 1; // sumamos 1 a $a

}

echo ver_a(); // imprimirá 1

echo ver_a(); // imprimirá 2

$a = 7;

echo ver_a(); // imprimirá 7

echo ver_a(); // imprimirá 8

?>

Funciones Variable

PHP soporta el concepto de funciones variables, esto es significa que si una variable tiene unos parentesis añadidos al final, PHP buscará un función con el mismo nombre que el contenido de la variable, e intentará ejecutarla.

<?php

function imprime($texto) {

echo $texto . “\n”;

}

function imprimeNegrilla($texto){

echo “<B>$texto</B>\n”;

}

$MiFunc = “imprime”;

$MiFunc(“Hola”); //imprimirá Hola

$MiFunc = “imprimeNegrilla”;

$MiFunc(“Hola”); //imprimirá Hola

?>

Recursión

PHP también permite la recursión, es decir, una función se puede llamar así misma. Para aclarar el concepto de recursión, vamos a crear una función que comprueba si un número es entero o no.

Un número que no sea entero (7’4), tiene una parte entera y otra decimal (comprendida entre 0 y 1), lo que vamos a hacer para comprobar si un número es entero o no, será restarle 1 al número en cuestión hasta que nos que demos sin parte entera, y entoces comprobaremos si tiene parte decimal (un poco lioso todo ésto).

<?php

function esEntero($numero) {

if ($numero > 1) {

return (esEntero($numero -1));

} elseif ($numero < 0) {

/* como los núm. son simétricos

chequeamos lo convertimos a positvo */

return (esEntero((-1) * $numero -1));

} elseif (($numero > 0) AND ($numero < 1)) {

return (“NO”);

} else {

/* el cero es entero por definición */

return (“SI”);

}

} //fin function

echo “¿Es 0 un número entero? “.esEntero(0).”<BR>\n”;

echo “¿Es 3.5 un número entero? “.esEntero(3.5).”<BR>\n”;

echo “¿Es -7 un número entero? “.esEntero(-7).”<BR>\n”;

echo “¿Es -9.2 un número entero? “.esEntero(9.2).”<BR>\n”;

?>

First tablet with Windows 8 Here is the first product in the world to integrate Windows 8, or at least we can say that this is the first tablet with Windows 8 version for develop...
mysql field type mysql_field_type — Devuelve el tipo del campo específicado en un resultado Descripción cadena mysql_field_type ( int $id_resultado, int $offset...
17 años despues, cierran Hotmail.. 17 años después de su lanzamiento más de 300 millones de cuentas de Hotmail migrarán al nuevo Outlook.com Tras su anunucio en la segunda mitad del ...
Insatisfechos: Usuarios no notan la diferencia entre el Ipad 3 y el 2 El nuevo iPad o el iPad 2012 no está entusiasmando todo lo que uno hubiera podido creer. De hecho, la llegada de esta tableta dejó impasible a gran pa...
La publicidad llegará al muro de Facebook en 2012 El feed de noticias de Facebook está a punto de dejar de ser un lugar libre de publicidad: a partir de principios de año, aparecerá un nuevo criterio ...
Solo la mitad de usuarios de redes sociales son fans de marcas Actualmente son pocas las grandes marcas que no han dado el salto aún al escenario de las redes sociales y no manejan ya cierto presupuesto para Socia...
Opencart Module for YouTube Video Display This module allows you to add a list of Youtube videos onto your site. Customers can play the videos directly from your site by clicking on the video ...
Google lanza su botón -compartir- en Google+ La gigante de internet, Google, acaba de lanzar un nuevo botón para su plataforma social Google+. El botón se llama “compartir” y se une al ya conocid...
# WiGig no termina de arrancar, lo hará en el 2015? El desarrollo y adopción de esta tecnología -también conocida como 802.11ad- se nos está haciendo eterno, y eso a pesar de que sus prestaciones so...
Optimizando PDFs para SEO Uno de los objetivos de Google es organizar la mayor cantidad de información posible y hacer que esta sea accesible para cualquier usuario. Para logra...
Las funciones en PHP
Tagged on: