AjLearning
AjLearning 0.1    





Desarrollo de Sitios con PHP y MySQL - Usando variables globales

Curso Desarrollo de Sitios con PHP y MySQL

    Anterior     Siguiente

Intentemos ahora de poner un color de fondo en cada fila de la tabla. Nos gustaría que fuera un color alternante, que cambie de fila par a fila impar. Un intento es tabla5.php.

<? function muestra($valor) { if ($nrenglon % 2) $fondo = '#eeeeee'; else $fondo = '#dddddd'; if ($valor < 0.5) $color = 'red'; else $color = 'blue'; echo "<td bgcolor='$fondo'><font color='$color'>$valor</font></td>\n"; } ?> <h1>Tabla</h1> <table border="1"> <? $nrenglon = 0; for ($x=0; $x<=2; $x+=0.01) { $nrenglon++; echo "<tr>"; muestra($x); muestra(sin($x)); muestra(cos($x)); echo "</tr>"; } ?> </table>

Tiene una variable $nrenglon que vamos incrementando dentro del ciclo for. Luego, dentro de nuestra función, preguntamos si es par o impar. Para esto, usamos un nuevo operador % que es el operador de módulo: $nrenglon % 2 divide por 2 y su valor es el resto de la división. Este resto será 0 cuando $nrenglon sea par, y será 1 cuando sea impar.

Vimos que un valor 0 vale por falso en una expresión de evaluación del if.

Si es impar, ponemos en la variable $fondo un color en hexadecimal, que es un tipo de gris. Y si es par, ponemos otro tono de gris.

Todo parece bien, pero al pedir la página en el explorador, resulta:



¿Qué sucedió? Habíamos visto ya que $color es una variable local. Ahora $fondo también es local. Pero lo mismo pasa con $nrenglon dentro de la función: es local (notemos que no está inicializada localmente, pero eso no afectó a la evaluación del if; cuando una variable no inicializada se usa en un contexto numerico, como en este caso con el operador %, se toma como un 0).

Corrigamos agregando una declaración en la función, en una página tabla6.php:

<? function muestra($valor) { global $nrenglon; if ($nrenglon % 2) $fondo = '#eeeeee'; else $fondo = '#dddddd'; if ($valor < 0.5) $color = 'red'; else $color = 'blue'; echo "<td bgcolor='$fondo'><font color='$color'>$valor</font></td>\n"; } ?>

Esa declaración global $nrenglon; informa a la función que esa variable debe tomarse de "afuera", no es local, está en la página misma.

Ahora, si pedimos esta nueva página corregida, obtenemos el resultado que queríamos:




Programado por Angel J. Lopez www.ajlopez.com