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 ?>




Documentación

  • En PHP é moi recomendable documentar as funcións para que outros programadores (ou ti mesmo no futuro) poidan entender facilmente que fai o código, que entradas necesita e que resultados devolve.
A forma máis usada é empregar PHPDoc, un estándar baseado en comentarios especiais que comezan con /** ... */. Estes comentarios sitúanse xusto enriba da definición da función.



Estrutura básica da documentación dunha función en PHP

  • Breve descrición: Unha frase curta que explique o propósito da función.
  • @param: Define cada parámetro que recibe a función. Inclúe:
  • o tipo de dato esperado (int, string, array, bool, float, object...).
  • o nome do parámetro.
  • unha descrición opcional.
  • @return: Indica o tipo de dato que devolve a función e unha breve explicación.
  • (Opcional) @throws: Se a función pode lanzar excepcións, especifícase aquí.


Exemplo en PHP con documentación
 1 <?php
 2 /**
 3  * Calcula a suma de dous números enteiros.
 4  *
 5  * @param int $a Primeiro número a sumar.
 6  * @param int $b Segundo número a sumar.
 7  * @return int Resultado da suma de $a e $b.
 8  */
 9 function sumar(int $a, int $b): int {
10     return $a + $b;
11 }
12 
13 ?>
Explicación dos elementos
  • @param int $a → Indica que o primeiro parámetro $a debe ser un enteiro.
  • @param int $b → Igual que o anterior pero para o segundo parámetro.
  • @return int → A función devolverá un enteiro, neste caso a suma.


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       /**
10        * Suma dous valores se ambos son numéricos.
11        *
12        * Esta función comproba primeiro se os dous parámetros recibidos son valores numéricos.  
13        * - Se son válidos, devolve a súa suma.  
14        * - Se non son numéricos, devolve unha mensaxe de erro.  
15        *
16        * @param mixed $numero1 Primeiro valor a sumar. Pode ser calquera tipo, mais debe ser numérico para que a operación sexa válida.
17        * @param mixed $numero2 Segundo valor a sumar. Igual que o anterior, debe ser numérico.
18        *
19        * @return int|float|string Devolve a suma como número enteiro ou decimal se os dous parámetros son correctos.  
20        *                          En caso contrario devolve unha cadea de texto cunha mensaxe de erro.
21        */
22         function sumar($numero1, $numero2) {
23             // Comprobar se ambos parámetros son números
24             if (is_numeric($numero1) && is_numeric($numero2)) {
25                 $resultado = $numero1 + $numero2;
26                 return $resultado;
27             } else {
28                 return "Ambos parámetros deben ser números.";
29             }
30         }
31 
32         // Chamar á función e amosar o resultado
33         $num1 = 5;
34         $num2 = "texto"; // Cambia este valor para probar con datos no numéricos
35         $resultado_suma = sumar($num1, $num2);
36 
37         if (is_numeric($resultado_suma)) {
38             echo "A suma de $num1 e $num2 é igual a $resultado_suma.";
39         } else {
40             echo $resultado_suma;
41         }
42     ?>
43 </body>
44 </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          /**
13          * Amosa unha mensaxe de saúdo empregando unha variable global.
14          *
15          * Esta función accede á variable global `$nome` e imprime un saúdo personalizado.
16          * Non recibe parámetros e non devolve ningún valor, só realiza a saída de texto.
17          *
18          * @global string $nome Nome da persoa ao que se lle vai dirixir o saúdo.
19          *
20          * @return void
21          */        
22          function saudar() {
23             global $nome; // Acceder á variable global $nome
24             echo "Ola, $nome!";
25         }
26 
27         // Chamar á función
28         saudar();
29     ?>
30 </body>
31 </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     /**
10      * Calcula a área dun rectángulo a partir da súa base e altura.
11      *
12      * A función comproba se os dous parámetros son valores numéricos:  
13      * - Se son válidos, devolve a área arredondada a dous decimais.  
14      * - Se non son numéricos, devolve unha mensaxe de erro.  
15      *
16      * @param float $base   Lonxitude da base do rectángulo. Ten como valor por defecto 5.
17      * @param float $altura Altura do rectángulo. Ten como valor por defecto 3.
18      *
19      * @return float|string Devolve a área como número decimal se os datos son correctos.  
20      *                      En caso contrario devolve unha cadea de texto cunha mensaxe de erro.
21      */
22     function calcularAreaRectangulo(float $base = 5, float $altura = 3): float|string {
23         // Comprobar se ambos parámetros son números
24         if (is_numeric($base) && is_numeric($altura)) {
25             // Calcular o área con máximo de 2 decimais
26             $area = round($base * $altura, 2);
27             return $area;
28         } else {
29             return "Ambos parámetros deben ser números.";
30         }
31     }
32 
33         // Chamar á función con parámetros personalizados
34         $areaPersonalizada = calcularAreaRectangulo(8, 4);
35         echo "O área do rectángulo coa base 8 e altura 4 é $areaPersonalizada.<br>";
36 
37         // Chamar á función sen especificar parámetros (valores por defecto)
38         $areaPorDefecto = calcularAreaRectangulo();
39         echo "O área do rectángulo coa base e altura por defecto é $areaPorDefecto.<br>";
40 
41         // Chamar á función con parámetros non numéricos
42         $areaNonNumerica = calcularAreaRectangulo("texto", 3);
43         echo "Resultado co primeiro parámetro non numérico: $areaNonNumerica.";
44     ?>
45 </body>
46 </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          /**
10          * Incrementa en 1 o valor dun número pasado por referencia.
11          *
12          * Esta función recibe unha variable por referencia e increméntaa en unha unidade.
13          * Non devolve ningún valor, xa que a modificación aplícase directamente sobre a variable orixinal.
14          *
15          * @param int &$numero Número enteiro que será incrementado por referencia.
16          *
17          * @return void
18          */
19         function incrementarPorReferencia(int &$numero): void {
20             $numero++; // Incrementar o número por referencia
21         }
22 
23 
24         // Declarar una variable
25         $valor = 5;
26 
27         // Chamar á función para incrementar a variable por referencia
28         incrementarPorReferencia($valor);
29 
30         // Amosar o valor da variable despois de chamar á función
31         echo "O valor da variable é: $valor"; // Mostrará "O valor da variable é: 6"
32     ?>
33 </body>
34 </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          /**
10          * Concatena dúas cadeas de texto se a súa lonxitude total é maior ca 10 caracteres.
11          *
12          * A función calcula a lonxitude combinada das dúas cadeas:  
13          * - Se é maior a 10, devolve a concatenación.  
14          * - Se non, devolve `null`.  
15          *
16          * @param string $cadea1 Primeira cadea de texto a concatenar. Valor por defecto: cadea baleira.
17          * @param string $cadea2 Segunda cadea de texto a concatenar. Valor por defecto: cadea baleira.
18          *
19          * @return string|null Devolve a concatenación das dúas cadeas cando a lonxitude total supera 10.  
20          *                     En caso contrario devolve `null`.
21          */
22         function concatenarCadeas(string $cadea1 = '', string $cadea2 = ''): ?string {
23             // Calcular a lonxitude total das cadeas
24             $lonxitudeTotal = strlen($cadea1) + strlen($cadea2);
25 
26             // Comprobar se a lonxitude total é maior a 10
27             if ($lonxitudeTotal > 10) {
28                 return $cadea1 . $cadea2; // Concatenar as cadeas
29             } else {
30                 return null;
31             }
32         }
33 
34 
35         // Probar a función
36         $resultado = concatenarCadeas("Hola, ", "mundo!");
37 
38         if ($resultado !== null) {
39             echo "Resultado: $resultado"; // Mostrará "Resultado: Hola, mundo!"
40         } else {
41             echo "Houbo un erro na función.";
42         }
43     ?>
44 </body>
45 </html>




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