Ver índice
Otras variables

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


Valores de las variables

Cuando hablábamos de las variables y nos referíamos a su ámbito decíamos que las variables definidas dentro de una función pierden sus valores en el momento en el que abandonemos el ámbito de esa función, es decir, cuando finaliza su ejecución.

Decíamos también que si el ámbito en el que hubiera sido definida fuera externo a una función los valores sólo se perderíantemporalmente– mientras durara la eventual ejecución de las instrucciones de aquella y que, una vez acabado ese proceso, volvían a recuperar sus valores.

Bajo estas condiciones, si invocáramos repetidamente la misma función obtendríamos cada vez el mismo resultado porque las posibles modificaciones que pudieran haberse producido (a través de las instrucciones contenidas en la función) en sus valores se perderían cada vez que abandonáramos la función con lo cual, cada una de las llamadas sucesivas restablecería el valor inicial.

Variables estáticas

Para poder conservar el último valor de una variable definida dentro de una función basta con definirla como estática. La instrucción que permite establecer una variable como estática es la siguiente:

static nombre = valor;

Por ejemplo: si la variable fuera $a y el valor inicial asignado fuera 3 escribiríamos: static $a=3;

La variable conservará el último de los valores que pudo habérsele asignado durante la ejecución de la función que la contiene. No retomará el valor inicial hasta que se actualice la página.

Ejemplo de variables estáticas

<?php
# Observa que hemos prescindido de los encabezados HTML.
# No son imprescindibles para la ejecución de los scripts
/* Escribamos una función y llamémosla sinEstaticas
    Definamos en ella dos variables sin ninguna otra especificación
	e insertemos las instrucciones para que al ejecutarse
	se escriban los valores de esas variables */

function sinEstaticas(){

# Pongamos aquí sus valores iniciales
	$a=0;
         $b=0;

# Imprimamos estos valores iniciales

	echo "Valor inicial de $a: ",$a,"<br>";
	echo "Valor inicial de $b: ",$b,"<br>";

/* Modifiquemos esos valores sumando 5 al valor de $a
   y restando 7 al valor de $b.
   $a +=5 y $b -=7 serán quienes haga esas
   nuevas asignaciones de valor
   ya lo iremos viendo, no te preocupes   */

	$a +=5;
	$b -=7;

# Visualicemos los nuevos valores de las variables
	echo "Nuevo valor de $a: ",$a,"<br>";
	echo "Nuevo valor de $b: ",$b,"<br>";

}
# Escribamos ahora la misma función con una modificación que será
# asignar la condición de estática a la variable $b
# Llamemos a esa función: conEstaticas

function conEstaticas(){

# Definimos $b como estática
	$a=0;
          static $b=0;

	echo "Valor inicial de $a: ",$a,"<br>";
	echo "Valor inicial de $b: ",$b,"<br>";

	$a +=5;
	$b -=7;

	echo "Nuevo valor de $a: ",$a,"<br>";
	echo "Nuevo valor de $b: ",$b,"<br>";

}

# Insertemos un texto que nos ayude en el momento de la ejecución

print ("Esta es la primera llamada  a sinEstaticas()<br>");

# Invoquemos la función sinEstaticas;

sinEstaticas();
 # Añadamos un nuevo comentario a la salida
print ("Esta es la segunda llamada  sinEstaticas()<br>");
print ("Debe dar el mismo resultado que la llamada anterior<br>");
# Invoquemos por segunda vez sinEstaticas;
sinEstaticas();

# Hagamos ahora lo mismo con la función conEstaticas

print ("Esta es la primera llamada a conEstaticas()<br>");

conEstaticas();

print ("Esta es la segunda llamada a conEstaticas()<br>");
print ("El resultado es distinto a la llamada anterior<br>");

conEstaticas();

?>
ejemplo16.php

Variables de variables

Además del método habitual de asignación de nombres a las variables -poner el signo $ delante de una palabra-, existe la posibilidad de que tomen como nombre el valor de otra variable previamente definida.

La forma de hacerlo sería esta:

$$nombre_variable_previa;

Veamos un ejemplo. Supongamos que tenemos una variable como esta: $color="verde";. Si ahora queremos definir una nueva variable que utilice como nombre el valor (verde) que está contenido en la variable previa ($color), habríamos de poner algo como esto:

$$color="es horrible";

Si se tratara de visualizar el valor de esta nueva variable podríamos hacerlo de una de estas tres maneras:

print $$color; o print ${$color}; o también print $verde;

Cualquiera de las instrucciones anteriores nos produciría la misma salida: es horrible. Podemos preguntarnos ¿cómo se justifica que existan dos sintaxis tan similares como $$color y ${$color}? ¿Qué pintan las llaves?.

La utilización de las llaves es una forma de evitar situaciones de interpretación confusa. Supongamos que las variables tienen un nombre un poco más raro. Por ejemplo que $color no se llama así sino $color[3] (podría ser que $color fuera un array –una lista de colores– y que esta variable contuviera el tercero de ellos).

En este supuesto, al escribir: print $$color[3] cabría la duda de si el número 3 pertenece (es un índice) a la variable $color o si ese número corresponde a $$color. Con print ${$color[3]} no habría lugar para esas dudas. Estaríamos aludiendo de forma inequívoca a 3 como índice de la variable $color.

¿Qué ocurre cuando la variable previa cambia de valor?

Cuando la variable utilizada para definir una variable de variable cambia de valor no se modifica ni el nombre de esta última ni tampoco su valor. Puedes ver este concepto, con un poco más de detalle, en el código fuente del ejemplo.

<?php
# Definamos una variable y asignémosle un valor
           $color="rojo";
# Definamos ahora una nueva variable de nombre variable
# usando para ello la variable anterior
           $$color=" es mi color preferido";

# Veamos impresos los contenidos de esas variables
print ( "El color ".$color. $$color ."<br>");
#o también
print ( "El color ".$color. ${$color}."<br>");
# o también
print ( "El color ".$color. $rojo."<br>");

# advirtamos lo que va a ocurrir al visualizar la página

print ("Las tres líneas anteriores deben decir lo mismo<br>");
print ("Hemos invocado la misma variable de tres formas diferentes<BR>");


# cambiemos ahora el nombre del color
$color="magenta";

/* La variable $rojo seguirá existiendo.
   El hecho de cambiar el valor a $color
   no significa que vayan a modificarse
   las variables creadas con su color anterior 
   ni que se creen automáticamente variables 
   que tengan por nombre el nuevo valor de $color   */

# Pongamos un mensaje de advertencia para que sea visualizado en la salida

print ("Ahora la variable $color ha cambiado a magenta<br>");
print ("pero como no hemos creado ninguna variable con ese color<br>");
print ("en las lineas siguientes no aparecerá nada <br>");
print ("detrás de la palabra magenta <br>");
print ("solo un mensaje de error advirtiendo que la variable no existe<br>");
/* para evitar ese mensaje de error basta con anteponer el símbolo @
  a las dos instrucciones print siguientes
# Escribimos los print advertidos
@print (" El color ".$color.$$color."<br>");
@print (" El color ".$color.${$color}."<br>");

# Comprobemos que la variable $rojo creada como variable de variable
# cuando  $color="rojo" aún existe y mantiene aquel valor

print ("Pese a que $color vale ahora ".$color."<br>");
print ("la vieja variable $rojo sigue existiendo <br>");
print ("y conserva su valor. Es este: ".$rojo);

?>

ejemplo17.php
Con mensaje de error
ejemplo18.php
Sin mensajes de error

Inserción de símbolos como elementos de texto

Tanto PHP como los navegadores hacen interpretaciones como símbolos del lenguaje de algunos caracteres especiales tales como $, ", o <, que cuando se pretendieran incluir como elementos no se visualizarían en pantalla.

Cuando pretendamos que aparezcan escritos tendremos que indicarlo de una forma especial. En este enlace podrás ver la forma de hacerlo.