|
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:

|