Í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 AJAXValores 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ían –temporalmente– 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(); ?>
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: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); ?>
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.