Funciones

Como en la mayoría de los lenguajes de programación las funciones tienen mucha relevancia e importancia a la hora de desarrollar código.

Sintaxis Básica

Las funciones son “no case-sensitive” (las puedes escribir en mayúsculas o minúsculas) y el nombre debe empezar con (a-z), o guión bajo, no obstante el nombre puede estar compuesto por números, letras y guiones bajos.

Ejemplo de función no case-sensitive:

1
2
3
4
5
6
7
 
function NoCaseSensitive() {
  echo "<br>";
  echo 'no son case sensitive';
  }  
NoCaseSensitive();
nOcAsEsEnSiTivE();

El código ejecutará dos veces la función NoCaseSensitive(), por lo que nos devolverá lo siguiente:

no son case sensitive
no son case sensitive

Returning Values

Todas las funciones en PHP devuelven un valor, en el caso de que no hayas especificado que quieres que te devuelva te devolverá un NULL. Además, también puedes devolver un String si lo necesitas.

Ejemplo:

1
2
3
4
5
6
7
8
 
function devuelveString() {
  echo "<br>";  
  return "devuelveString";
  }  
  devuelveString(); //Aquí tambien lo devulve, 
                    //pero no lo muestra hasta que no utilices el echo  
 echo devuelveString ();

También podemos modificar los valores de las variables fuera de las funciones si durante la declaración le indicamos que se le pasará por referencia.

1
2
3
4
5
6
7
$valor='Hola';
function referencia(&$valor){
  $valor='Adios';
  echo "<br>$valor ";
  }
referencia($valor);
echo "<br> $valor ";

Devolverá:

Adios
Adios

Si no se lo especificamos solo cambiará el valor de la variable dentro de la función pero no fuera. De hecho así estaríamos declarando otra variable con el mismo nombre dentro de la función, en vez de acceder a la de fuera.

1
2
3
4
5
6
7
8
$valor='Hola';
function referencia($valor){
  $valor='Adios';
  echo "<br>$valor ";
  return $valor;
  }
referencia($valor);
echo "<br> $valor ";

Nos devolverá:

Adios
Hola

Por último, conocer que también las funciones pueden ser declaradas para devolver algún valor por referencia, aunque tienen que devolver una variable no puedes devolver una expresión por referencia.

Variable Scope

PHP tiene tres tipos de alcance (scopes) para las variables, se pueden declarar como variables globales, variables definidas dentro de la función y por último variables de clases.
Cuando entras dentro de una función las variables que creas están dentro del alcance de esa función.
Para acceder a variables globales lo puedes hacer de dos maneras o bien utilizando la declaración “global” o bien utilizando el array $GLOBALS.

1
2
3
4
5
6
7
8
9
$vuno;
$vdos;
function alcance(){
echo $GLOBALS[‘vuno’];
}
function alcance2(){
global $vuno; // con esto podemos alcanzar a la variable que esta fuera de la función
echo $vuno;
}

Pasando Argumentos

En las funciones de PHP podemos pasar argumentos para influir en su comportamiento.

Cuando creas una función puedes definir el número de argumentos que necesites. No obstante, cuando llamas a la función tu puedes pasar el numero de parámetros que quieras a pesar de que no esté declarado en la declaración de la función.

También puedes poner los valores que tienen por defecto esos argumentos, es decir, para que, en el caso de que llames a la función y no le pases el valor del argumento ese argumento tendrá un valor por defecto.

1
2
3
4
5
6
7
funtion prueba ($variabledefecto = "Probando!!"){
echo $variabledefecto;
}
Prueba(); 
// mostrará Probando!!
prueba("Ahora cambia el valor.");
// mostrará Ahora cambia el valor.

Para evitar fallos los argumentos por defecto deben estar escritas al final de la función y por el orden que les van a llegar.

Controlar los argumentos o parámetros

Para controlar los argumentos que nos llegan en PHP podemos utilizar tres funciones:

func_num_args();

Devuelve el número de argumentos que le has enviado a la función

func_get_arg();

Devuelve el argumento que le has enviado a la función func_get_arg(0)

func_get_args();

Devuelve un array de todos los elementos que le has pasado como argumentos

Pasando Argumentos por referencia

Podemos pasar variables por referencia, de esta manera nuestra función puede afectar a variables externas.
Solo las variables pueden ser pasadas por referencia como argumentos no expresiones.

Además, en PHP 5 (no PHP 4) puedes pasar variables por referencia con valor por defecto, ahora bien, si la variable no existe se creará y al acabar la función como es obvio morirá, pero si existe podrá ser objeto de modificaciones.