Diferencia entre revisiones de «PHP Constantes e variables. Ámbito.»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 523: Línea 523:
  
 
<br />
 
<br />
−
== Solucións Exercicios propostos ==
+
=== Solucións Exercicios propostos ===
  
 
* '''Solución Exercicio 1:'''
 
* '''Solución Exercicio 1:'''

Revisión del 19:15 19 sep 2023

Constantes

  • As constantes son valores que normalmente se definen ao comezo do código e cuxo valor non varía ao longo do programa.
  • Soen identificar por medio de letras maiúsculas.
  • Os nomes das constantes poden empezar cunha letra ou guión baixo pero non poden empezar cun número.
  • Distingue maiúsculas de minúsculas no seu nome.
 1 <?php   
 2 
 3     define('MEUNOME','Angel Fernández');
 4     echo "<p>Aquí poño o menu " . MEUNOME . "</p>";
 5    
 6 ?>        
 7         <p> Outro párrafo....</p>
 8 <?php
 9     printf("Ola. Sigo sendo %s. Poido seguir referenciando a constante ao longo de toda a páxina.",MEUNOME);
10 ?>


  • Nunha constante podemos definir parámetros que despois sexan substituídos polos seus valores coas funcións printf e sprintf:
1 <?php   
2 
3     define('CADEA_PRESENTACION','Ola usuario %s');
4 
5     printf(CADEA_PRESENTACION,'Angel');
6 ?>

Variables

  • NOTA: Esta sección está asociada á realización do EXERCICIO 2.


  • A diferenza das constantes, as variables poden cambiar o seu valor ao longo do programa.
  • Non é necesario definilas nin declaralas.
  • Distinguen maiúsculas de minúsculas no seu nome. '$var' é unha variable e '$Var' é outra variable diferente.
  • A primeira letra do nome dunha variable debe ser un guión baixa ou unha letra. Non pode ser un número.
  • Identifícanse por medio do símbolo $.

Nota: A pesares de que non é obrigatorio declaralas, eu aconsello establecer un valor ao comenzo da páxina e comentar o seu propósito, xa que pode suceder que utilicemos unha variable e despois cambiemos algunha letra da mesma, pasando a manexar outra variable diferente. Desta forma podemos ter una referencia ao nome da variable.

Exemplo de código:
1 <?php   
2     $varCadea="Isto é un variable de cadea";
3     $varNumero=50;
4 
5     echo $varCadea . "<br />";
6     echo $varNumero . "<br />";
7 
8 ?>
  • PHP é unha linguaxe debilmente tipada. Quero isto dicir que as variables non se definen de ningún tipo, se non que o tipo vai depender do contido da variable.
Así, por exemplo, vou asinar a mesma variable diferentes tipos de datos e funcionará igualmente.
 1 <?php   
 2 
 3     $varTipos=5;
 4     echo $varTipos . "<br />";
 5     $varTipos='Cadea';
 6     echo $varTipos . "<br />";
 7     $varTipos=3.15454;
 8     echo $varTipos . "<br />";
 9     $varTipos=true;
10     echo $varTipos . "<br />";
11 ?>


  • Dependendo do contido que teñan, as variables poden ser dun destes tipos escalares:
  • integer: Os integers, ou enteiros, poden ter distintos valores numéricos enteiros que se expresan con diferentes notacións.
  • $variable = 18; // Número entero positivo
  • $variable = -18; // Número entero negativo
  • $variable = 0x12; // Notación hexadecimal, en principio no la utilizaremos
  • float ou double: Este tipo de datos son os números de punto flotante aos que normalmente chamamos números decimais, por exemplo, 9.876. Ambos teñen moita precisión, pero double é o máis preciso (con máis decimais). A sintaxe para utilizalos é bastante simple:
  • $variable = 9.876;
  • string: O tipo de datos string, tamén coñecido como cadea de caracteres, exprésase coa seguinte sintaxe:
  • $variable = "Isto é unha cadea";
  • boolean: Trátase dun tipo lóxico. Os seus posibles valores son true (verdadeiro) ou false (falso).
  • $variable = true;
  • $variable = false;


En programación normalmente se identifica ao valor false como 0 (cero) e ao true coma 1 (un).
En PHP cando utilizamos expresións que van ser avaliadas como booleanas, faise unha conversión no que:
  • Calquera destes valores é considerado como false: 0 (cero) , 0.0 (cero con decimais a cero), (cadea baleira), '0' (cadea cun valor cero), NULL (variable sen valor asinado)
  • Calquera outro valor diferente dos anteriores é considerado verdadeiro (true)
Máis información neste enlace.


Existen máis tipos como podemos ver no seguinte enlace: http://php.net/manual/es/language.types.intro.php


Dando formato a unha variable utilizando a función printf e sprintf

  • Como vimos anteriormente no uso da función printf/sprintf, podemos especificar en que formato se vai visualizar unha variable.
Por exemplo:
$var=5;
printf("A variable vai visualizarse como unha cadea: %s",$var);

Dependendo do carácter empregado despois do '%', temos:

  • b - o argumento é tratado coma un valor de tipo integer e presentado coma un número binario.
  • c - o argumento é tratado coma un valor de tipo integer e presentado coma o carácter con ese valor ASCII.
  • d - o argumento é tratado coma un valor de tipo integer e presentado coma un número decimal (con signo).
  • e - o argumento é tratado con notación científica (e.x. 1.2e+2). O especificador de precisión indica o número de díxitos despois del punto decimal a partires de PHP 5.2.1. En versións anteriores, se tomou coma el número de díxitos significativos (menos un).
  • E - como %e pero utiliza a letra maiúscula (e.g. 1.2E+2).
  • f - o argumento é tratado coma un valor de tipo float e presentado coma un número de punto flotante (considerando a configuración rexional).
  • F - o argumento é tratado coma un valor de tipo float e presentado coma un número de punto flotante (non considerando a configuración rexional). Dispoñible desde PHP 4.3.10 e PHP 5.0.3.
  • g - o mesmo que %e e %f.
  • G - o mesmo que %E e %f.
  • o - o argumento é tratado coma un valor de tipo integer e presentado como un número octal.
  • s - o argumento é tratado e presentado coma un string.
  • u - o argumento é tratado coma un valor de tipo integer e presentado coma un número decimal sen signo.
  • x - o argumento é tratado coma un valor de tipo integer e presentado coma un número hexadecimal (cas letras en minúsculas).
  • X - o argumento é tratado coma un valor de tipo integer e presentado coma un número hexadecimal (coas letras en maiúsculas).


Nota: Para formatear un número pódese facer uso da función number_format.


Uso de variables dentro da función echo

  • Anteriormente contamos que había unha diferenza entre utilizar comillas dobres ou simples na función echo.
Vexamos agora esta diferenza no uso de variables.
  • Se usamos unha variable dentro da función echo:
  • Con comillas dobres, a variable será substituída polo seu valor. Se expande.
  • Con comillas simples, xerará a cadea $variable.
Por exemplo:
1 <?php   
2     $var = "Isto é unha variable de cadea";
3     
4     echo "A variable var con \" vale: $var<br/>";
5     echo 'A variable var con \' vale: $var<br />';
6 ?>
Dará como resultado:
1 A variable var con " vale: Isto é unha variable de cadea
2 A variable var con ' vale: $var

Funcións

  • PHP ten unha multitude de funcións para facernos a vida máis sinxela á hora de programar.
  • Aconsello antes de 'programar' algo cos valores das variables (tipo dividir unha frase en palabras, quitar espazo en branco, redondeo, número máis alto de varios,...) consultar as seguintes funcións:
  • Vexamos algúns exemplos aplicados a cada tipo.


Funcións de Cadea

1 <?php        
2 $cadea = "un,dous,tres,catro";
3 $result = explode(',',$cadea);
4 print($result[0]);  //Un
5 print($result[1]);  // Dous
6 print($result[2]);  // Tres
7 ?>


1 <?php        
2 $cadea = "Cambia gato por can";
3 print(str_replace("gato","can",$cadea));  // => RESULTADO: Camba can por can
4 ?>


  • Outras funcións interesantes de practicar:
  • strlen
  • strpos / strrpos
  • substr
  • trim
  • strstr



Funcións Matemáticas

1 <?php        
2 $num = -123;
3 echo abs($num); // 123
4 $num = 2.14;
5 printf("<br>Redondeo cara arriba: %d <br />Redondeo cara abaixo:%d",ceil($num),floor($num));    // Arriba => 3, Abaixo => 2
6 ?>
1 <?php        
2 $pi = 3.14159;
3 echo round($pi); // Resultado => 3
4 $nota = 3.75;
5 echo round($nota); // Resultado => 4
6 ?>


Funcións aplicadas a datas e horas

Comprobación de definición e asignación

  • En PHP temos dúas funcións para saber se unha variable está definida / ten valor asinado.


  • Función isset($var): Devolve TRUE se $var existe e ten un valor distinto de NULL; FALSE en caso contrario.
  • Función empty($var): Devolve FALSE se $var existe e ten un valor no baleiro, distinto de cero. Doutro modo devolve TRUE.
As seguintes expresións son consideradas como baleiras:
  • "" (una cadena vacía)
  • 0 (0 como un integer)
  • 0.0 (0 como un float)
  • "0" (0 como un string)
  • NULL
  • FALSE
  • array() (un array balairo)
  • $var; (unha variable declarada, pero sen un valor)



  • Vexamos un exemplo:
 1 <?php   
 2 
 3     $var1 = 100; 
 4 
 5     printf("Valor de var1: %s<br/>",$var1);
 6     printf("isset: %b<br/>",isset($var1));
 7     printf("empty: %b<br/>",empty($var1));
 8     
 9     $var1 = null; 
10 
11     printf("Valor de var1: null<br/>");
12     printf("isset: %b<br/>",isset($var1));
13     printf("empty: %b<br/>",empty($var1));
14     
15     $var1 = ''; 
16 
17     printf("Valor de var1: %s<br/>","''");
18     printf("isset: %b<br/>",isset($var1));
19     printf("empty: %b<br/>",empty($var1));
20     
21 
22         // Comprobamos agora o que vale unha variable non definida....
23     printf("Valor de var2: %s<br/>","sen asinar");
24     printf("isset: %b<br/>",isset($var2));
25     printf("empty: %b<br/>",empty($var2));
26    
27 ?>


  • Da como resultado:
Valor de var1: 100
isset: 1
empty: 0
Valor de var1: null
isset: 0
empty: 1
Valor de var1: ''
isset: 1
empty: 1
Valor de var2: sen asinar
isset: 0
empty: 1
  • Nota:
  • Estas funcións serán utilizadas para comprobar se os datos dun formulario están cubertos ou non.
  • Fixarse como amosamos o resultado como un booleano utilizando o parámetro %b da función printf. Isto é necesario xa que PHP amosa o valor true coma un 1 e o valor false como comillas.




 1 <?php   
 2 
 3 $variable = 10;
 4 echo isset($variable)==1 ? 'TRUE' : 'FALSE';  // DEVOLVE A CADEA TRUE
 5 unset($variable);
 6 echo '<br />';
 7 echo isset($variable)==1 ? 'TRUE' : 'FALSE';  // DEVOLVE A CADEA FALSE
 8 
 9 ?>
10 
11 === Comprobación do tipo de dato ===
12 
13 * PHP é unha linguaxe debilmente tipada. Quere isto dicir que o tipo dunha variable non se decide na definición da mesma, se non que vai depender do valor gardado.
14 
15 Así: 
16 :$var = 5; => Será de tipo integer.
17 :$var= 'ola'; => Será de tipo string.
18 
19 * PHP permite asinar á mesma variable diferentes tipos durante a execución do código PHP.
20 
21 * Para comprobar o tipo dunha variable teremos que facer uso dalgunha das seguintes funcións:
22 
23 :*[http://php.net/manual/es/function.is-array.php is_array]: Comproba que a variable sexa un array.
24 :*[http://php.net/manual/es/function.is-bool.php is_bool]: Comproba que a variable sexa de tipo booleano.
25 :*[http://php.net/manual/es/function.is-float.php is_float], [http://php.net/manual/es/function.is-double.php is_double], [http://php.net/manual/es/function.is-real.php is_real]: Comproban que a variable sexa un número real.
26 :*[http://php.net/manual/es/function.is-int.php is_int], [http://php.net/manual/es/function.is-integer.php is_integer], [http://php.net/manual/es/function.is-long.php is_long]: Comproban que a variable sexa un número enteiro.
27 :*[http://php.net/manual/es/function.is-numeric.php is_numeric]: Comproba que a variable sexa un número ou unha cadea numérica. '''Usado para validar campos dun formulario xa que os vai a enviar como cadeas'''.
28 :*[http://php.net/manual/es/function.is-scalar.php is_scalar]: Comproba que a variable sexa un escalar (enteiro, real, booleano ou cadea de texto).
29 :*[http://php.net/manual/es/function.is-string.php is_string]: Comproba que a variable sexa unha cadea de texto.
30 
31 Vexamos un exemplo:
32 
33 ::<syntaxhighlight lang="php" enclose="div" highlight="" >
34 <?php
35 
36 $idade='Angel';
37 
38 if (!is_numeric($idade)) die('A idade ten que ser un número...');
39 
40 ?>


  • Unha función complementaria ás anteriores é: getType. Devolve o tipo de datos dunha variable.
Vexamos un exemplo:
<?php
$nome=54;

if (getType($nome)!='string') echo('O nome ten que ser unha cadea...');

?>



Asignar o tipo a unha variable

Vexamos un exemplo:

<?php

    $varA = $varB = "3.14159"; // asignamos as dúas variables unha cadea de texto
    settype($varA, "float"); // Agora é de tipo float
    print "\$varA vale $varA e ten tipo ".gettype($varA);
    print "<br />";
    print "\$varB vale $varB e ten de tipo ".gettype($varB);

?>

Ámbito das variables


  • O ámbito é un concepto que fai referencia á 'visibilidade' dunha variable dentro dun programa.
  • Normalmente, en outras linguaxes de programación, unha variable definida a nivel de programa é visible para todas as funcións dentro dese programa. En PHP non pasa así.
  • Aínda que non vimos como crear funcións en PHP as introduciremos neste punto para explicar os ámbitos.
Vexamos un exemplo:
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 2     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
 4     <head>
 5         <meta charset="utf-8" />
 6         <title>Exemplos de códigos php</title>
 7     </head>
 8 <?php
 9     function modificarVar(){
10         
11         $var=10;
12         printf('$var--->%d despois de ser modificada. Impreso dentro da función.<br/>',$var);   // PREGUNTA: Por que printf leva comillas simples nesta orde ?
13         
14     }
15 ?>    
16     <body>
17 <?php   
18 
19     $var = 100; // Isto é unha variable de cadea
20 
21     modificarVar();
22     printf('$var--->%d despois de ser modificada.Impreso fora da función.<br/>',$var);
23     
24 ?>
25     </body>    
26 </html>


O resultado será isto:
1 $var--->10 despois de ser modificada. Impreso dentro da función.
2 $var--->100 despois de ser modificada.Impreso fora da función.


Como vemos, despois de chamar á función, imprimimos o valor da variable $var, e non imprime o valor modificados, se non o valor orixinal.


  • En PHP para poder modificar o valor dunha variable a nivel GLOBAL temos dúas formas:
  • Definindo novamente a variable dentro da función antepoñendo o prefixo global.
  • Acceder a dita variable có array $GLOBALS[nome_variable]. O nome da variable non leva '$' dentro do array.
Vexamos o mesmo exemplo aplicando as dúas solucións:
 1 <?php
 2     function modificarVar(){
 3         
 4         global $var;
 5         
 6         $var=10;
 7         printf('$var--->%d despois de ser modificada. Impreso dentro da función.<br/>',$var);  
 8         
 9     }
10 ?>


1 <?php
2     function modificarVar(){
3         
4         $GLOBALS['var']=10;
5         printf('$var--->%d despois de ser modificada. Impreso dentro da función.<br/>',$GLOBALS['var']);   
6         
7     }
8 ?>
Nota: Fixarse que a variable $var dentro da función non existe. Se intentamos imprimila non terá valor asinado. Poderíamos traballar cunha variable $var dentro da función, pero sería diferente á $GLOBALS['var'].


Nos dous casos anteriores o resultado será isto:
1 $var--->10 despois de ser modificada. Impreso dentro da función.
2 $var--->10 despois de ser modificada.Impreso fora da función.



Exercicios propostos

  • Exercicio 1:
Define as variables necesarias para gardar esta información:
• nome: O teu nome
• apelidos: Os teus apelidos
• nota1, nota2, nota3: As notas das 3 avaliacións
• telefono: Un teléfono de exemplo
• email: Dirección de correo.
Amosa en forma de lista ordenada e centrada a información de todas as variables, tendo en conta que o nome e apelidos van nunha única liña có formato: Apelidos, nome e as notas van nunha única liña có formato: 1ª Avaliación: XX – 2ª Avaliación: YY – 3ª Avaliación
Crea unha función de nome mediaNotas que espera recibir como parámetros 3 notas e devolve a media con dous díxitos decimais.
Pon ao final da lista a media das 3 notas no que se amosen dous díxitos decimais.
Emprega todas as formas de amosar información na páxina cliente: echo, printf e sprintf



Solucións Exercicios propostos

  • Solución Exercicio 1:
  • Con echo:
 1 <?php
 2 $nome = "O teu nome";
 3 $apelidos = "Os teus apelidos";
 4 $nota1 = 8.5;
 5 $nota2 = 9.2;
 6 $nota3 = 7.8;
 7 $telefono = "987-654-321";
 8 $email = "correo@example.com";
 9 
10 echo "<ol style='text-align: center;'>";
11 echo "<li>Nome completo: $apelidos, $nome</li>";
12 echo "<li>Notas: 1ª Avaliación: $nota1 – 2ª Avaliación: $nota2 – 3ª Avaliación: $nota3</li>";
13 echo "<li>Teléfono: $telefono</li>";
14 echo "<li>Email: $email</li>";
15 
16 function mediaNotas($nota1, $nota2, $nota3) {
17     $media = ($nota1 + $nota2 + $nota3) / 3;
18     return number_format($media, 2);
19 }
20 
21 $media = mediaNotas($nota1, $nota2, $nota3);
22 echo "<li>Media das notas: $media</li>";
23 echo "</ol>";
24 ?>


  • Con printf:
 1 <?php
 2 $nome = "O teu nome";
 3 $apelidos = "Os teus apelidos";
 4 $nota1 = 8.5;
 5 $nota2 = 9.2;
 6 $nota3 = 7.8;
 7 $telefono = "987-654-321";
 8 $email = "correo@example.com";
 9 
10 printf("<ol style='text-align: center;'>");
11 printf("<li>Nome completo: %s, %s</li>", $apelidos, $nome);
12 printf("<li>Notas: 1ª Avaliación: %.2f – 2ª Avaliación: %.2f – 3ª Avaliación: %.2f</li>", $nota1, $nota2, $nota3);
13 printf("<li>Teléfono: %s</li>", $telefono);
14 printf("<li>Email: %s</li>", $email);
15 
16 function mediaNotas($nota1, $nota2, $nota3) {
17     $media = ($nota1 + $nota2 + $nota3) / 3;
18     return number_format($media, 2);
19 }
20 
21 $media = mediaNotas($nota1, $nota2, $nota3);
22 printf("<li>Media das notas: %.2f</li>", $media);
23 printf("</ol>");
24 ?>


  • Con sprintf:
 1 <?php
 2 $nome = "O teu nome";
 3 $apelidos = "Os teus apelidos";
 4 $nota1 = 8.5;
 5 $nota2 = 9.2;
 6 $nota3 = 7.8;
 7 $telefono = "987-654-321";
 8 $email = "correo@example.com";
 9 
10 $html = sprintf("<ol style='text-align: center;'>");
11 $html .= sprintf("<li>Nome completo: %s, %s</li>", $apelidos, $nome);
12 $html .= sprintf("<li>Notas: 1ª Avaliación: %.2f – 2ª Avaliación: %.2f – 3ª Avaliación: %.2f</li>", $nota1, $nota2, $nota3);
13 $html .= sprintf("<li>Teléfono: %s</li>", $telefono);
14 $html .= sprintf("<li>Email: %s</li>", $email);
15 
16 function mediaNotas($nota1, $nota2, $nota3) {
17     $media = ($nota1 + $nota2 + $nota3) / 3;
18     return number_format($media, 2);
19 }
20 
21 $media = mediaNotas($nota1, $nota2, $nota3);
22 $html .= sprintf("<li>Media das notas: %.2f</li>", $media);
23 $html .= sprintf("</ol>");
24 
25 echo $html;
26 ?>





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