domingo, 14 de septiembre de 2014

PHP (03) Funciones (04) Ambitos de las variables y acceso a datos globales

Los ámbitos de las variables son aquellas zonas donde se puede acceder a una variable, en las funciones, todas las variables que se declaran en su interior son invisibles para el resto del código, es decir, que si yo declaro una variable dentro de una función, esta variable será invisible para otras funciones y para el flujo principal del código.
Además, debido al ámbito de las variables, como programadores, no tendremos que preocuparnos por la coincidencia de nombres dentro del código ya que las variables pueden tener el mismo nombre dentro de diferentes funciones y tener un valor diferente en cada caso.
Todo esto lo vamos a ver en el siguiente ejemplo:
<?php
 $valor1=22;
 $valor2=33;
 echo '<p>El valor de $valor fuera de la función es: ' . $valor1 . '</p>';
 control();
 echo '<p>El valor de $valor1 fuera y después de llamar a la función es: ' . $valor1 . '</p>';

 function control()
 {
  $valor1=11;
  echo '<p>El valor de $valor1 dentro de la función es: ' . $valor1 . ' y no entra en conflicto</p>';
 }

?>

Que nos da como resultado:
El valor de $valor fuera de la función es: 22
El valor de $valor1 dentro de la función es: 11 y no entra en conflicto
El valor de $valor1 fuera y después de llamar a la función es: 22

Vemos como las variables no entran en conflicto y tienen sus propios valores según en el ámbito en el que se encuentren, de hecho, ¿que pasaría si llamásemos a la variables $valor2 dentro de la función?
Se podría pensar que como $valor2 esta declarado en el flujo central, las funciones tendrían acceso a ella, pero no es así, para ello se necesita que sean datos globales de lo contrario dará un error como este:

Notice: Undefined variable: valor2 in C:\xampp\htdocs\miphp\cadenas.php on line 17

Pero ¿como se accede a datos globales? para acceder a datos globales es tan sencillo como introducir la palabra global delante del nombre de la variable en la función como si se estuviera declarando la variable:
global $valor2;

Lo cual nos dejaría un código así:
<?php
 $valor1=22;
 $valor2=33;
 echo '<p>El valor de $valor fuera de la función es: ' . $valor1 . '</p>';
 control();
 echo '<p>El valor de $valor1 fuera y después de llamar a la función es: ' . $valor1 . '</p>';

 function control()
 {
  $valor1=11;
  echo '<p>El valor de $valor1 dentro de la función es: ' . $valor1 . ' y no entra en conflicto</p>';
   global $valor2;
   echo '<p><b>El valor de $valor2 dentro de la función es: ' . $valor2 . ' y esta tomando el valor global</b></p>';
 }

?>

El cual nos daría el siguiente resultado:
El valor de $valor fuera de la función es: 22
El valor de $valor1 dentro de la función es: 11 y no entra en conflicto
El valor de $valor2 dentro de la función es: 33 y esta tomando el valor global
El valor de $valor1 fuera y después de llamar a la función es: 22

De este modo como se puede ver que la función tiene acceso a la variable de forma global.

No hay comentarios:

Publicar un comentario