PHP Funcións

De MediaWiki
Ir a la navegación Ir a la búsqueda

Funcións definidas polo usuario

  • Unha función é un conxunto de instrucións que se executan ao ser 'chamada' ou 'invocada' a función a través do seu nome.
  • Unha función pode (é optativo) levar parámetros que veñen ser variables cuxos valores son utilizados dentro da función.
  • Sintaxe:
1 <?php
2 function exemplo($arg_1, $arg_2, /* ..., */ $arg_n)
3 {
4     echo "Función de exemplo.\n";
5     return $valor_devolto;
6 }
7 ?>
  • Como vemos unha función vai poder devolver un valor o cal pode ser utilizado polo código que a chama.
  • Os nomes das funcións seguen as mesmas regras que as demais etiquetas de PHP. Un nome de función válido comeza cunha letra ou guión baixo, seguido de calquera número de letras, números ou guións baixos.
  • Vexamos un exemplo dunha función que devolve a suma de dous números pasados como parámetros:
 1 <?php
 2     function sumarNumeros($val1,$val2){
 3         return $val1+$val2;
 4     }
 5 ?>
 6 
 7     <body>
 8         <?php
 9             $num1=5;
10             $num2=10;
11             
12             printf("Suma dos números:%d", sumarNumeros($num1, $num2));
13             echo "<br/>";
14             if (sumarNumeros($num1, $num2)>10){
15                 echo "A suma da mais que 10...";
16             }
17         ?>
Fixarse como na liña 13 amosamos o resultado da chamada á función e na liña 15 utilizamos a función como unha expresión dentro da cláusula if.
Dará como resultado:
Suma dos números:15
A suma da mais que 10...
Como norma xeral definiremos a función antes da súa chamada (eu as poño antes da etiqueta <body>). Isto só é necesario se definimos unha función como resultado dunha condición (poderíamos definir unha función dentro dun if).


  • Unha función pode devolver calquera tipo de dato, como pode ser boolean, e utilizalas como parte dunha condición:
 1 <?php
 2     /** 
 3      * Función que devolve true se $val1 > $val2 e os dous son positivos
 4      *    @param int $val1: primer parámetro a comparar
 5      *    @param int $val2: segundo parámetro a comparar
 6      */
 7     function eMaior($val1,$val2){
 8         if ($val1<0 || $val2<0 || $val1<$val2){
 9             return false;
10         }
11         return true;
12     }
13 ?>
14     <body>
15         <?php
16             $num1=5;
17             $num2=10;
18        
19             if (eMaior($num1, $num2)){
20                 echo '$num1 é maior que $num2 e ademaís son positivos';
21             }
22             
23         ?>


Dará como resultado:
$num1 é maior que $num2 e ademaís son positivos


OBRIGATORIO: Sempre que cremos unha función será obrigatorio describir (en forma de comentario enriba da definición da función) o seu cometido e explicar a función dos parámetros.

Por exemplo:
 1 <?php
 2 /**
 3  * Esta función multiplica dous números e devolve o resultado.
 4  *
 5  * @param float $a O primeiro número a multiplicar.
 6  * @param float $b O segundo número a multiplicar.
 7  * @return float O resultado da multiplicación.
 8  */
 9 function multiplicar($a, $b) {
10     return $a * $b;
11 }
12 ?>


  • A partires da versión php 7.0 podemos indicar o tipo de dato que vai devolver a función, poñendo dous puntos e o tipo despois dos parámetros.
No exemplo anterior:
 1 <?php
 2 /**
 3  * Esta función multiplica dous números e devolve o resultado.
 4  *
 5  * @param float $a O primeiro número a multiplicar.
 6  * @param float $b O segundo número a multiplicar.
 7  * @return float O resultado da multiplicación.
 8  */
 9 function multiplicar($a, $b) :float {
10     return $a * $b;
11 }
12 ?>



Acceder a variables definidas 'fora' da función

  • Se temos definidas variables definidas fora da función necesitaremos facer uso:
  • Ou da palabra reservada global dentro da función
  • Ou do array $GLOBALS['variable']
Para poder acceder ao seu valor.

Paso de parámetros por valor / referencia

  • Xa vimos cando estudamos as variables globais, que dentro dunha función as variables son locais a ela. Quere isto dicir que as modificacións que fagamos sobre as variables non afectan a esas variables fora da función.
  • O mesmo pasa cos parámetros.
Por defecto, a modificación do valor dun parámetro dentro dunha función non vai afectar ao valor da variable que se usou para chamar á función.
  • Vexamos un exemplo:
 1 <?php
 2     /* 
 3      * Función que concantena un texto co nome da moeda a un prezo
 4      * Parámetros:
 5      *    $cadea: prezo que se envía
 6      */
 7     function concatenaMoeda($cadea){
 8         $valor_local=' euros';
 9         $cadea = $cadea . $valor_local;
10         
11     }
12 ?>
13     <body>
14         <?php
15             $prezo=35.45;
16             concatenaMoeda($prezo);
17             
18             printf("Cadea \$prezo modificado:%s",$prezo);
19             
20         ?>


Dará como resultado:
Cadea $prezo modificado:35.45


  • Se queremos que ó modificar o valor do parámetro $cadea na función modificase o valor da variable $prezo teremos que pasalo por referencia.
Para iso debemos de definir o parámetro da función có símbolo &
  • Vexamos o exemplo anterior:
 1 <?php
 2     /* 
 3      * Función que concantena un texto co nome da moeda a un prezo
 4      */
 5     function concatenaMoeda(&$cadea){
 6         $valor_local=' euros';
 7         $cadea = $cadea . $valor_local;
 8         
 9     }
10 ?>
11     <body>
12         <?php
13             $prezo=35.45;
14             concatenaMoeda($prezo);
15             
16             printf("Cadea \$prezo modificado:%s",$prezo);
17             
18         ?>


Dará como resultado:
Cadea $prezo modificado:35.45 euros

Valores por defecto

  • Unha función pode ter parámetros definidos cun valor por defecto. Neses casos, a chamada a función se pode facer sen enviar un dato a ese parámetro, collendo dentro da función o valor por defecto definido.
Importante: Se na función existen parámetros obrigatorios e parámetro opcionais, teñen que ir ao final todos os opcionais.
Vexamos un exemplo:
 1 <?php
 2 /**
 3  * Devolve o nome completo concatenado da forma: apel1 apel2, nome
 4  * Parámetros:
 5  *  nome: nome da persoa
 6  *  apel1: 1º apelido 
 7  *  apel2: 2º apelido (opcional)
 8  */
 9 function getNomeCompleto($nome,$apel1,$apel2=''){
10 
11     return sprintf("$apel1 $apel2, $nome");
12 }
13 
14 echo '<br />';
15 print(getNomeCompleto('Angel','Fernandez','Gonzalez'));
16 echo '<br />';
17 print(getNomeCompleto('Juan','Ramirez'));
18 
19 
20 ?>




Exercicios propostos

  • Exercicio 1: Crea unha función que devolva a suma de dous números. Debes comprobar que os datos enviados son números. En caso de que non o sexan deberá de amosar o erro. Se o son amosa a suma.


  • Exercicio 2: Crea unha función que amose o texto Ola, XXXXX sendo XXXXX o nome definido nunha variable fora da función.


  • Exercicio 3: Crea unha función que calcule a área en base a dous parámetros: base e altura. Ditos parámetros teñen que ser numéricos e a función terá que devolver como moito dous díxitos decimais. Se non se envían valores, a base terá por defecto o valor 5 e a altura o valor 3. En caso de que non sexan números deberá amosar un erro.


  • Exercicio 4: Crea unha función cun parámetro que incremente o valor de dito parámetro e que modifique o valor da variable coa que se chama a dita función, sen empregar global.


  • Exercicio 5: Crea unha función que concatene dúas cadeas nos parámetros e teña valor por defecto cadea baleira. Soamente debe concatenar se o número de caracteres totais é maior a 10. En caso contrario debe devolver null e quen a chama, controlar o error e amosar un texto en caso de erro ou as cadeas concatenadas se toda vai ben.









Solución Exercicios propostos

  • Solución Exercicio 1: Crea unha función que devolva a suma de dous números. Debes comprobar que os datos enviados son números. En caso de que non o sexan deberá de amosar o erro. Se o son amosa a suma.
 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>Exemplo de función en PHP</title>
 5 </head>
 6 <body>
 7     <h1>Función para sumar números</h1>
 8     <?php
 9         // Definir unha función que suma dous números
10         function sumar($numero1, $numero2) {
11             // Comprobar se ambos parámetros son números
12             if (is_numeric($numero1) && is_numeric($numero2)) {
13                 $resultado = $numero1 + $numero2;
14                 return $resultado;
15             } else {
16                 return "Ambos parámetros deben ser números.";
17             }
18         }
19 
20         // Chamar á función e amosar o resultado
21         $num1 = 5;
22         $num2 = "texto"; // Cambia este valor para probar con datos no numéricos
23         $resultado_suma = sumar($num1, $num2);
24 
25         if (is_numeric($resultado_suma)) {
26             echo "A suma de $num1 e $num2 é igual a $resultado_suma.";
27         } else {
28             echo $resultado_suma;
29         }
30     ?>
31 </body>
32 </html>



  • Solución Exercicio 2: Crea unha función que amose o texto Ola, XXXXX sendo XXXXX o nome definido nunha variable fora da función.
 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>Exemplo de función en PHP</title>
 5 </head>
 6 <body>
 7     <h1>Función que accede a unha variable externa</h1>
 8     <?php
 9         // Variable definida fora da función
10         $nome = "Ana";
11 
12         // Definir unha función que accede á variable externa
13         function saudar() {
14             global $nome; // Acceder á variable global $nome
15             echo "Ola, $nome!";
16         }
17 
18         // Chamar á función
19         saudar();
20     ?>
21 </body>
22 </html>



  • Solución Exercicio 3: Crea unha función que calcule a área en base a dous parámetros: base e altura. Ditos parámetros teñen que ser numéricos e a función terá que devolver como moito dous díxitos decimais. Se non se envían valores, a base terá por defecto o valor 5 e a altura o valor 3. En caso de que non sexan números deberá amosar un erro.
 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>Exemplo de función con comprobación de parámetros en PHP</title>
 5 </head>
 6 <body>
 7     <h1>Función para calcular o área dun rectángulo</h1>
 8     <?php
 9         // Definir unha función con parámetros e valores por defecto
10         function calcularAreaRectangulo($base = 5, $altura = 3) {
11             // Comprobar se ambos parámetros son números
12             if (is_numeric($base) && is_numeric($altura)) {
13                 // Calcular o área con máximo de 2 decimais
14                 $area = round($base * $altura, 2);
15                 return $area;
16             } else {
17                 return "Ambos parámetros deben ser números.";
18             }
19         }
20 
21         // Chamar á función con parámetros personalizados
22         $areaPersonalizada = calcularAreaRectangulo(8, 4);
23         echo "O área do rectángulo coa base 8 e altura 4 é $areaPersonalizada.<br>";
24 
25         // Chamar á función sen especificar parámetros (valores por defecto)
26         $areaPorDefecto = calcularAreaRectangulo();
27         echo "O área do rectángulo coa base e altura por defecto é $areaPorDefecto.<br>";
28 
29         // Chamar á función con parámetros non numéricos
30         $areaNonNumerica = calcularAreaRectangulo("texto", 3);
31         echo "Resultado co primeiro parámetro non numérico: $areaNonNumerica.";
32     ?>
33 </body>
34 </html>



  • Solucion Exercicio 4: Crea unha función cun parámetro que incremente o valor de dito parámetro e que modifique o valor da variable coa que se chama a dita función, sen empregar global.
 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>Exemplo de función con paso de parámetros por referencia en PHP</title>
 5 </head>
 6 <body>
 7     <h1>Función con paso de parámetros por referencia</h1>
 8     <?php
 9         // Definir unha función que incrementa un número por referencia
10         function incrementarPorReferencia(&$numero) {
11             $numero++; // Incrementar el número por referencia
12         }
13 
14         // Declarar una variable
15         $valor = 5;
16 
17         // Chamar á función para incrementar a variable por referencia
18         incrementarPorReferencia($valor);
19 
20         // Amosar o valor da variable despois de chamar á función
21         echo "O valor da variable é: $valor"; // Mostrará "O valor da variable é: 6"
22     ?>
23 </body>
24 </html>



  • Solucion Exercicio 5: Crea unha función que concatene dúas cadeas nos parámetros e teña valor por defecto cadea baleira. Soamente debe concatenar se o número de caracteres totais é maior a 10. En caso contrario debe devolver null e quen a chama, controlar o error e amosar un texto en caso de erro ou as cadeas concatenadas se toda vai ben.
 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>Exemplo de función en PHP con concatenación de cadeas</title>
 5 </head>
 6 <body>
 7     <h1>Función para concatenar cadeas</h1>
 8     <?php
 9         // Definir unha función que concatena cadeas con comprobación de lonxitude
10         function concatenarCadeas($cadea1 = '', $cadea2 = '') {
11             // Calcular a lonxitude total das cadeas
12             $lonxitudeTotal = strlen($cadea1) + strlen($cadea2);
13 
14             // Comprobar se a lonxitude total é maior a 10
15             if ($lonxitudeTotal > 10) {
16                 return $cadea1 . $cadea2; // Concatenar as cadeas
17             } else {
18                 return null;
19             }
20         }
21 
22         // Probar a función
23         $resultado = concatenarCadeas("Hola, ", "mundo!");
24 
25         if ($resultado !== null) {
26             echo "Resultado: $resultado"; // Mostrará "Resultado: Hola, mundo!"
27         } else {
28             echo "Houbo un erro na función.";
29         }
30     ?>
31 </body>
32 </html>


-- Ángel D. Fernández González -- (2016).