Inicio arrow Artículos arrow php arrow Manual PHP+MySQL (VI - Funciones definidas por el usuario)
Menú Principal
Lo más leído
Consigue Firefox
Usuarios
993 registrados
1 hoy
5 esta semana
138 este mes
Último: gabity...
Formulario de acceso



... Regenerar clave
... Registro
Manual PHP+MySQL (VI - Funciones definidas por el usuario) Imprimir E-Mail
domingo, 16 de julio de 2006

Podemos definir una función como aquel bloque de código que puede ser llamado desde cualquier parte del programa, que puede recibir una serie de parámetros y que devolverá o no un resultado o valor. Ya que cualquier instrucción válida de PHP puede aparecer dentro de una función, inclusive otras funciones, definiciones, etc. , la función definida por el usuario es aquella que dará mayor versatilidad a nuestra programación y realizará todo aquello que nos es imposible conseguir con las funciones que el lenguaje incorpora. 


Declaración de funciones

La declaración de una función se realizará mediante la instrucción function, definiéndose de la siguiente forma:

function foo ($arg_1, $arg_2, ..., $arg_n) {
  //bloque de código ..
  echo "Función de ejemplo.\n";
  return $retval;
}

Podrá aparecer en el cuerpo de la función cualquier instrucción válida de PHP, así como otras funciones o definiciones de clases. Una vez declarada la función, ya no se podrá volver a redefinir, a diferencia de otras lenguajes de programación. A partir de la versión 4 de PHP, el requerimiento impuesto de definir siempre la función antes de su llamada ha quedado eliminado.


La instrucción return

Tal y como hemos visto en la declaración de la función, el final de la misma se termina con la instrucción return. Dicha instrucción también puede utilizarse para finalizar la función en algún punto intermedio de la misma si es necesario. La instrucción return finalizará la ejecución del código de una función y devolverá un valor determinado, que podrá incluir tablas, objetos o variables. Como las funciones sólo pueden devolver un valor en PHP, si queremos que la función devuelva varios, haremos uso de las tablas.

Un aspecto a tener muy en cuenta a la hora de romper el código de una función con return es que nuestra función ha de orientarse hacia su utilización en la mayor parte posible de situaciones. Es por esto recomendable que la instrucción return sólo se use si es imprescindible. Veamos un ejemplo que ayude a explicar de manera más clara este asunto:

<?php
 function mayor_que ($x, $y)
  {
    if ($x > $y) {
    return $x." es mayor que".$y;
  } else {
    return $y." es mayor que".$x;
  }
 }
?>

Ahora veamos el mismo código algo más optimizado:

<?php
 function mayor_que ($x, $y)
 {
   $msg = "";
   if ($x > $y) {
   $msg = $x." es mayor que".$y;
 } else {
   $msg = $y." es mayor que".$x;
 }
   return $msg;
 }
?>


Parámetros de las funciones

Una función puede ser inyectada con información por medio de parámetros. Dichos parámetros pueden ser comunicados mediante una lista de parámetros, una lista de variables y/o constantes separadas por comas. Dichos parámetros podrán ser pasados de dos formas: por valor (por defecto) o por referencia. La diferencia consiste en que, cuando pasamos un parámetro por valor a una función, el argumento de dicho valor no se verá nunca modificado por la función, mientras que si pasamos dicho parámetro por referencia, cualquier cambio que se produzca sobre el argumento quedará grabado y se eliminará su valor anterior.

Ya que el comportamiento por defecto en PHP es que el parámetro se pase siempre por valor, antepondremos un ampersand (&) al nombre del parámetro para que éste se pase por referencia:

function add_some_extra(&$string) {
    $string .= ' y algo más.';
}
$str = 'Esto es una cadena, ';
add_some_extra($str);
echo $str;    // Devuelve 'Esto es una cadena, y algo más.'

Si lo que queremos es pasar por referencia una variable que no es tomada por el parámetro por defecto de una función, antepondremos el ampersand al nombre del parámetro en la llamada a la función:

function nada ($bar) {
    $bar .= ' y algo más.';
}
$str = 'Esto es una cadena, ';
nada ($str);
echo $str;    // Devuelve 'Esto es una cadena, '
nada (&$str);
echo $str;    // Devuelve 'Esto es una cadena, y algo más.'

En cuanto a los parámetros por valor, en PHP podemos usar fucniones que definan valores por defecto para sus parámetros, como por ejemplo:

<?php
 function suma ($y, $x=1)
 {
   $x = $x + 1;
   return $x+$y;
 }
?>

Cuando se usan parámetros por valor, estos tienen obligatoriamente que estar a la derecha de cualquier parámetro sin valor por defecto. Si no es así, la función podría no funcionar de forma adecuada. Una forma errónea de declarar la anterior función sería esta:

function suma ($x=1, $y)


Funciones variable

PHP soporta el concepto de funciones variable. Esto es, si PHP encuentra una variable con paréntesis añadidos al final, buscará una fucnión con el mismo nombre que la evaluación de la variable y la intentará ejecutar. La principal utilidad de este aspecto0 es la de realizar callbacks, tablas de funciones, etc. Veamos un ejemplo:

<?php
function hola() {
    echo "Esto es la función hola()<br>\n";
}

function nada( $arg = '' ) {
    echo "Esto es la función nada(); el parámetro es '$arg'.<br>\n";
}

$func = 'hola';
$func();
$func = 'nada';
$func( 'test' );
?>


Recursión

Para terminar con el capítulo dedicado a las funciones, atenderemos a la llamada de una función a sí misma (recursión). El concepto puede observarse de una forma muy clara en esta función que comprueba si un número es o no entero:

<?php
 function esEntero($numero) {
   if ($numero > 1) {
   return (esEntero($numero -1));
 } elseif ($numero < 0) {

 return (esEntero((-1) * $numero -1));
 } elseif (($numero > 0) AND ($numero < 1)) {
 return ("NO");
 } else {

 return ("SI");
 }
} //fin function

echo "¿Es  0  un número entero? ".esEntero(0)."\n";
echo "¿Es  3.5 un número entero? ".esEntero(3.5)."\n";
echo "¿Es  -7  un número entero? ".esEntero(-7)."\n";
echo "¿Es -9.2 un número entero? ".esEntero(9.2)."\n";
?>


Comentario[s]

Sólo los usuarios registrados pueden escribir comentarios.
Por favor, valídate o regístrate.

Powered by AkoComment 2.0!

 
< Anterior   Siguiente >