Vous êtes sur la page 1sur 2

Otras variables

Valores de las variables


Variables estáticas

Cuando hablábamos de las <?


variables, nos referíamos a su
ámbito y comentábamos que las # Observa que hemos prescindido de los encabezados HTML.
variables definidas dentro de una # No son imprescindibles para la ejecución de los scripts
función pierden sus valores en el
momento en el que abandonemos /* Escribamos una función y llamémosla sinEstaticas
el ámbito de esa función, es decir, Definamos en ella dos variables sin ninguna otra especificación
cuando finaliza su ejecución. e insertemos las instrucciones para que al ejecutarse
se escriban los valores de esas variables */
Decíamos también que si el
ámbito en el que hubiera sido
definida fuera externo a una function sinEstaticas(){
función los valores sólo se
perderían –temporalmente– # Pongamos aquí sus valores iniciales
mientras durara la eventual $a=0;
ejecución de las instrucciones de $b=0;
aquella y que, una vez acabado
ese proceso, volvían a recuperar # Imprimamos estos valores iniciales
sus valores.

Bajo estas condiciones, si


echo "Valor inicial de $a: ",$a,"<br>";
invocáramos repetidamente la echo "Valor inicial de $b: ",$b,"<br>";
misma función obtendríamos cada
vez el mismo resultado. /* Modifiquemos esos valores sumando 5 al valor de $a
y restando 7 al valor de $b.
Las posibles modificaciones que $a +=5 y $b -=7 serán quienes haga esas
pudieran haberse efectuado (a nuevas asignaciones de valor
través de las instrucciones ya lo iremos viendo, no te preocupes */
contenidas en la función) en el
valor inicial de las variables, se
perderían cada vez que
$a +=5;
abandonáramos la función con lo $b -=7;
cual, si hiciéramos llamadas
sucesivas, se repetirían tanto el # Visualicemos los nuevos valores de las variables
valor inicial como el resultado. echo "Nuevo valor de $a: ",$a,"<br>";
echo "Nuevo valor de $b: ",$b,"<br>";
Variables estáticas
}

Para poder conservar el último # Escribamos ahora la misma función con una modificación que será
valor de una variable definida # asignar la condición de estática a la variable $b
dentro de una función basta con
# Llamemos a esa función: conEstaticas
definirla como estática.

La instrucción que permite function conEstaticas(){


establecer una variable como
estática es la siguiente: # Definimos $b como estática
$a=0;
static nombre = valor; static $b=0;
P. ej: si la variable fuera $a y el
valor inicial asignado fuera 3 echo "Valor inicial de $a: ",$a,"<br>";
escribiríamos: echo "Valor inicial de $b: ",$b,"<br>";

static $a=3; $a +=5;


$b -=7;
La variable conservará el último de
los valores que pudo habérsele
asignado durante la ejecución de echo "Nuevo valor de $a: ",$a,"<br>";
la función que la contiene. No echo "Nuevo valor de $b: ",$b,"<br>";
retomará el valor inicial hasta
que se actualice la página. }

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


Variables de variables
print ("Esta es la primera llamada a sinEstaticas()<br>");
Además del método habitual de
asignación de nombres a las # Invoquemos la función sinEstaticas;
variables -poner el signo $ delante
de una palabra-, existe la
sinEstaticas();
posibilidad de que tomen como
nombre el valor de otra variable # Añadamos un nuevo comentario a la salida
previamente definida. print ("Esta es la segunda llamada sinEstaticas()<br>");
print ("Debe dar el mismo resultado que la llamada anterior<br>");
La forma de hacerlo sería esta: # Invoquemos por segunda vez sinEstaticas;
sinEstaticas();
$$nombre_variable_previa;

Veamos un ejemplo. # Hagamos ahora lo mismo con la función conEstaticas

Supongamos que tenemos una print ("Esta es la primera llamada a conEstaticas()<br>");


variable como esta:
conEstaticas();
$color="verde";

Si ahora queremos definir una print ("Esta es la segunda llamada a conEstaticas()<br>");


nueva variable que utilice como print ("El resultado es distinto a la llamada anterior<br>");
nombre el valor (verde) que está
contenido en la variable previa conEstaticas();
($color), habríamos de poner algo
como esto: ?>
$$color="es horrible";
¿Cómo podríamos visualizar el
ejemplo11.php
valor de esta nueva variable?

Habría tres formas de escribir la Variables de variables


instrucción:

print $$color; <?


o # Definamos una variable y asignémosle un valor
print ${$color}; $color="rojo";
o también # Definamos ahora una nueva variable de nombre variable
print $verde; # usando para ello la variable anterior
$$color=" es mi color preferido";
Cualquiera de las instrucciones
anteriores nos produciría la misma
# Veamos impresos los contenidos de esas variables
salida: es horrible.
print ( "El color ".$color. $$color ."<br>");
Podemos preguntarnos ¿cómo se #o también
justifica que existan dos sintaxis print ( "El color ".$color. ${$color}."<br>");
tan similares como $$color y # o también
${$color}? ¿Qué pintan las llaves?. print ( "El color ".$color. $rojo."<br>");
La utilización de las llaves es una
# advirtamos lo que va a ocurrir al visualizar la página
forma de evitar situaciones de
interpretación confusa.
print ("Las tres líneas anteriores deben decir lo mismo<br>");
Supongamos que las variables print ("Hemos invocado la misma variable de tres formas diferentes<BR>");
tienen un nombre un poco más
raro.
# cambiemos ahora el nombre del color
Por ejemplo que $color no se llama
$color="magenta";
así sino $color[3] (podría ser que
$color fuera un array –una lista de
colores– y que esta variable /* La variable $rojo seguirá existiendo.
contuviera el tercero de ellos). El hecho de cambiar el valor a $color
no significa que vayan a modificarse
En este supuesto, al escribir: print las variables creadas con su color anterior
$$color[3] cabría la duda de si el ni que se creen automáticamente variables
número 3 pertenece (es un índice) que tengan por nombre el nuevo valor de $color */
a la variable $color o si ese
número corresponde a $$color.
# Pongamos un mensaje de advertencia para que sea visualizado en la
Con print ${$color[3]} no habría salida
lugar para esas dudas. Estaríamos
aludiendo de forma inequívoca a 3 print ("Ahora la variable $color ha cambiado a magenta<br>");
como índice de la variable $color. print ("pero como no hemos creado ninguna variable con ese color<br>");
print ("en las lineas siguientes no aparecerá nada <br>");
¿Qué ocurre cuando print ("detrás de la palabra magenta <br>");
la variable previa
cambia de valor?
# Escribimos los print advertidos
Cuando la variable utilizada para print (" El color ".$color.$$color."<br>");
definir una variable de variable print (" El color ".$color.${$color}."<br>");
cambia de valor no se modifica ni
el nombre de esta última ni # Comprobemos que la variable $rojo creada como variable de variable
tampoco su valor. # cuando $color="rojo" aún existe y mantiene aquel valor
Puedes ver este concepto, con un
print ("Pese a que $color vale ahora ".$color."<br>");
poco más de detalle, en el código
fuente del ejemplo.
print ("la vieja variable $rojo sigue existiendo <br>");
print ("y conserva su valor. Es este: ".$rojo);
La solución del ejercicio
?>
Las diferencias que habrás podido
observar al realizar el ejercicio nº7
están originadas por la
interpretación que hacen PHP y el ejemplo12.php
navegador de algunos caracteres
especiales, tales como $, ", o <,
que al ser interpretados como
símbolos del lenguaje no se Ejercicio nº 7
imprimen en pantalla.
Abre tu editor creando un documento nuevo. Copia el código fuente del ejemplo anterior y
Cuando pretendamos que pégalo en ese documento. Ahora guárdalo como ejercicio7.php. Abre en tu navegador
aparezcan escritos tendremos que ejercicio7.php y compáralo con el que visualizas al pulsar sobre ejemplo12.php.
indicarlo de una forma especial. Comprueba que existen algunas diferencias entre ambos.
En este enlace podrás ver la forma
de hacerlo.
¡Cuidado!

Aunque en los enunciados no se advierta, como norma general, los ejercicios deberás
guardarlos siempre en el directorio practicas que has creado al realizar el ejercicio nº 2

Anterior Indice Siguiente

Vous aimerez peut-être aussi