Foros del Web » Programando para Internet » PHP »

Necesito una explicación de este código.

Estas en el tema de Necesito una explicación de este código. en el foro de PHP en Foros del Web. Me he decidido a estudiar PHP en serio y he bajado el manual de PHP de la web php.net que por ahora es el mejor ...
  #1 (permalink)  
Antiguo 01/05/2008, 09:47
Avatar de ldp
ldp
 
Fecha de Ingreso: marzo-2005
Ubicación: Por fin, en mi nueva casa!
Mensajes: 617
Antigüedad: 19 años, 1 mes
Puntos: 3
Necesito una explicación de este código.

Me he decidido a estudiar PHP en serio y he bajado el manual de PHP de la web php.net que por ahora es el mejor que he encontrado ya que explica todo lo básico, para gente que, como yo, no tenemos ni puñetera idea de programación.

Mirando los ejemplos para las variables estáticas me encuentro con:

Código PHP:
<?php
function Test()
{
    static 
$count 0;

    
$count++;
    echo 
$count;
    if (
$count 10) {
        
Test ();
    }
    
$count--;
}
?>
Y me gustaría que alguien me explicara qué hace la línea $count--;. He visto que si quito esa línea y llamo la función varias veces, sólo cuenta de 1 a 10 la primera vez que se llama. Pero no logro entender cómo $count--; logra hacer que el contador vuelva a cero. Alguien me lo puede explicar lo más simple posible?
  #2 (permalink)  
Antiguo 01/05/2008, 11:41
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Necesito una explicación de este código.

Normalmente una variable existe solamente en el ámbito en la que está definida. Luego de salir de ese ámbito (al salir de la función, en este caso) la variable deja de estar definida.
Las variables estáticas no existen fuera del ámbito de la función, pero su valor no se pierde para siguientes llamadas de la misma función. Lo que (según entiendo) sucede aquí es:

$count++ incrementa el valor de $count
si $count es menor que 10, llama de nuevo a Test(), que mantendrá el valor de $count que ya tenía, así que volverá a incrementar.
Así, se llama a Test() hasta que $count es 10, momento en el que las funciones llamadas terminan y por cada una de las llamadas se hace un $count--

Por si caés en la misma confusión que yo al ver el código (si te había quedado claro, ni te molestes en leer ):
En un principio pensé que si se hacía el $count-- las funciones deberían llamarse de nuevo y entonces estaríamos en un bucle infinito de llamadas (count =9, count =10, count=9...) pero al fijarme bien en el código me di cuenta de que esto no pasa, ya que el punto de "continuación" de la ejecucución luego de Test() es simplemente el $count--, para cualquiera de las instancias de la función. Por lo que no puede volver nunca al paso anterior y volver a llamar a Test() aunque $count sea menor que 10.

Para dejar esto más claro, modifiqué un poco el código de la función:

Código PHP:
<?php
function Test() {
    echo 
"llamé a Test()\n";
    static 
$count 0;

    
$count++;
    echo 
"Acabo de sumar, \$count vale $count\n";
    if (
$count 10) {
        
Test ();
    }
    
$count--;
    echo 
"Acabo de restar, \$count vale $count\n";
}

Test();
?>
Pegá en un archivo .php y fijate la salida.


Saludos.
  #3 (permalink)  
Antiguo 02/05/2008, 02:43
Avatar de ldp
ldp
 
Fecha de Ingreso: marzo-2005
Ubicación: Por fin, en mi nueva casa!
Mensajes: 617
Antigüedad: 19 años, 1 mes
Puntos: 3
Re: Necesito una explicación de este código.

Muchas gracias por la explicación! Ya me ha quedado claro y también estoy fascinada de la lógica de PHP. Nunca habría llegado a la conclusión de que todo ello se producía porque primero se lleva a cabo todo el código dentro del IF y después todo lo que está fuera. Pensaba que el $count-- sólo actuaba una vez, pero si llamamos a la función 10 veces, es lógico que TODO el código, incluido $count--, se lea 10 veces.
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 01:34.