PHP
Main Menu 
 
Desarrollo de Páginas Web con PHP 

Muchas veces, cuando trabajamos en el desarrolo de una aplicacion, nos surge la necesidad de ejecutar un mismo bloque de codigo en diferentes partes de nuestra aplicacion. Una Funcion no es mas que un bloque de codigo al que le pasamos una serie de parametros y nos devuelve un valor. Como todos los lenguaje de programacion, PHP trae una gran cantidad de funciones para nuestro uso, pero las funciones mas importantes son las que nosotros creamos.

Para declarar una funcion debemos utilizar la instruccion function seguido del nombre que le vamos a dar, y despues entre parentesis la lista de argumentos separados por comas, aunque tambien habrafunciones que no recogan ningun argumento.

function nombre_de_funcion (arg_1, arg_2, ..., arg_n) 

{

bloque de codigo

}

Cualquier instruccion valida de PHP puede aparecer en el cuerpo (lo que antes hemos llamado bloque de codigo) de una funcion, incluso otras funciones y definiciones de clases.

En PHP no podemos redefinir una funcion previamente declarada, y ademas en PHP3, las funciones deben definirse siempre antes de que se invoquen, en PHP4 este requerimiento ya no existe. 

La instruccion RETURN

Cuando invocamos una funcion, la ejecucion del programa pasa a ejecutar las lineas de codigo que contenga la funcion, y una vez terminado, el programa continua su ejecucion desde el punto en que fue llamada la funcion.

Existe una manera de terminar la ejecucion de la funcion aunque aun haya codigo por ejecutar, mediante el uso de la instrucion return terminamos la ejecucion del codigo de una funcion y devolvemos un valor. Podemos tener varios return en nuestra funcion, pero por lo general, cuantos máasreturn tengamos menos reutilizable sera nuestra funcion.

<?php

function mayor ($x, $y)

{

if ($x > $y) {

return $x." es mayor que".$y;

} else {

return $y." es mayor que".$x;

}

}

?>

Aunque quedaria 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 instrucion 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 funcion devuelva varios tenemos que utilizar una tabla (array). 

 

Parametros de las funciones

Existen dos formas de pasar los parametros a una funcion, por valor o por referencia.

Cuando pasamos una variable por valor a una funcion, ocurra lo que ocurra en esta en nada modificara el contenido de la variable. Mientras que si lo hacemos por referencia, cualquier cambio acontecido en la funcion sobre la variable lo hara 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;

 

//parametros por valor

echo suma ($a, $b);    // imprimira 4

echo $a;    // imprimira 1

 

//parametros por referencia

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

echo $a;      //imprimira 2

?>

Si queremos que un parametro de una funcion se pase siempre por referencia debemos anteponer un ampersand (&) al nombre del parametro en la definicion de la funcion.

En PHP podemos definir valores por defecto para los parametros de una funcion. Estos valores tienen que ser una expresion constante, y no una variable o miembro de una clase. Ademas cuando usamos parametros por defectos, estos deben estar a la derecha de cualquier parametro sin valor por defecto, de otra forma PHP nos devolvera un error.

<?php

function suma ($x=1, $y)

{

$x = $x + 1;

return $x+$y;

}

?>

Si ejecutarmos esta funcion nos dara error, ya que hemos dado a $x el valor 1 por defecto y la hemos colocado a la izquierda de un parametro 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 numero variable de parametros, pero PHP4 si.

Llegados a este punto, damos un paso atras y volvemos a las variables, para distinguir entre variables esteticas (static) y globales (global). Las variables estaticas se definen dentro de una funcion, la primera vez que es llamada dicha funcion 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>"; // imprimira 2

echo contador()."<BR>"; // imprimira 3

?>

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

<?php 

var $a = 1;

function ver_a()

{

global $a;

echo $a."<BR>"; // imprimira el valor de $a

 

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

}

echo ver_a(); // imprimira 1

echo ver_a(); // imprimira 2

$a = 7;

echo ver_a(); // imprimira 7

echo ver_a(); // imprimira 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 buscara un funcion con el mismo nombre que el contenido de la variable, e intentara ejecutarla.

<?php

function imprime($texto) {

echo $texto . "\n";

}

function imprimeNegrilla($texto){

echo "<B>$texto</B>\n";

}

$MiFunc = "imprime";

$MiFunc("Hola");  //imprimira Hola

$MiFunc = "imprimeNegrilla";

$MiFunc("Hola");  //imprimira Hola

?>

Recursion

PHP tambien permite la recursion, es decir, una funcion se puede llamar asi misma. Para aclarar el concepto de recursion, vamos a crear una funcion que comprueba si un numero es entero o no. 

Un numero 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 numero es entero o no, sera restarle 1 al numero en cuestion hasta que nos que demos sin parte entera, y entoces comprobaremos si tiene parte decimal (un poco lioso todo esto). 

<?php

function esEntero($numero) {

if ($numero > 1) {

return (esEntero($numero -1));

 

} elseif ($numero < 0) {

/* como los num. son simetricos 

chequemos lo convertimos a positvo */

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

 

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

return ("NO");

} else {

/* el cero es entero por definicion */

return ("SI");

}

 

} //fin function

 

echo "Es  0  un numero entero? ".esEntero(0)."\n";

echo "Es  3.5 un numero entero? ".esEntero(3.5)."\n";

echo "Es  -7  un numero entero? ".esEntero(-7)."\n";

echo "Es -9.2 un numero entero? ".esEntero(9.2)."\n";

 

?>