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--;
}
?>
| |||
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: Saludos. |
| ||||
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. |