Foros del Web » Programando para Internet » PHP »

Duda sobre variables "static"

Estas en el tema de Duda sobre variables "static" en el foro de PHP en Foros del Web. Buenas, tengo una duda sobre la variable static en este código: Código PHP: <?php function  birthday  ( ) {     static  $edad  =  0 ;      $edad  =  ...
  #1 (permalink)  
Antiguo 10/06/2013, 11:39
 
Fecha de Ingreso: junio-2013
Ubicación: España
Mensajes: 1
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta Duda sobre variables "static"

Buenas, tengo una duda sobre la variable static en este código:
Código PHP:
<?php
function birthday ( ) {
    static 
$edad 0;

    
$edad $edad 1;

    echo 
"cumpleaños número $edad<br />";
}

$edad 30;

//Invocamos la función dos veces
birthday ( );
birthday ( );

echo 
"Edad: $edad <br />";
?>
En fin, se supone que eso muestra:

cumpleaños número 1
cumpleaños número 1
Edad: 30


Y aquí mi duda: ¿por qué se declara la variable con static en la función si la declaramos como variable local (?) antes de llamar la función? ¿Se trata de la misma variable?

El ejemplo lo he sacado de un libro de php, ¿es posible que sea un fallo del libro, o soy yo que no lo entiendo?

Muchas gracias, un saludo.
  #2 (permalink)  
Antiguo 10/06/2013, 12:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Duda sobre variables "static"

Static lo único que hace es garantizar que la variable sea la misma durante la ejecución de tu script, aunque la declares antes, no esta adentro de la función ya que el ámbito no es el mismo.

Ahora respecto a la salida es porque siempre declaras $edad como 0, si lo que quieres es incrementar, tendrías que agregar un condicional para ver si no existe la variable y entonces inicializarla, y si la quieres ver fuera de la función birthday() entonces tiene que ser global.

Saludos.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:36.