<th>Qui</th>
<th>Sex</th>
<th>Sáb</th>
</tr>
<?php linha(); ?>
<?php linha(); ?>
<?php linha(); ?>
22
Casa do Código
Capítulo 3. Construindo um calendário com PHP
<?php linha(); ?>
<?php linha(); ?>
</table>
Adicionamos cinco chamadas à função linha(), assim, quando acessarmos
localhost/calendario.php será renderizada uma tabela parecida com esta:
Figura 3.3: Calendário ainda sem os dias
Agora vamos adicionar uma nova função para desenhar o calendário. Esta fun-
ção será chamada de calendario() e deverá ser adicionada logo após a função
linha:
<?php
function linha()
{
...
}
function calendario()
{
$dia = 1;
$semana = array();
while ($dia <= 31) {
array_push($semana, $dia);
if (count($semana) == 7) {
linha($semana);
$semana = array();
}
$dia++;
}
23
3.3. Usando funções
Casa do Código
}
?>
Aqui temos bastante coisa nova. Pela primeira vez estamos usando variáveis no
PHP. Repare que as variáveis sempre começam com um cifrão ( $). Esta é uma regra
do PHP: elas sempre iniciam com cifrão seguido de uma letra ou um underline.
Sendo assim, as variáveis $dia, $semana, $pessoa e $_nome são válidas para o
PHP, mas as $1, $-nome e $!nome são inválidas.
Neste trecho também estamos usando um tipo de dados do PHP chamado de
array.
Reparou no uso da instrução while? Viu que esta instrução é praticamente
igual ao while de linguagens como C? Outra instrução bem parecida é o if, que
verifica se uma condição é verdadeira.
Para desenhar o calendário, iniciamos no dia primeiro e usamos o while para
fazer um laço que se repetirá até o dia 31. O array $semana é usado para colocar
os dias da semana e garantimos que ele não terá mais que sete dias usando o if. A
função array_push() adiciona mais um valor em nosso array e dentro do if o
array é reiniciado.
Ah, uma nova função apresentada foi a count(). Seu funcionamento é fácil de
deduzir, certo? Ela conta a quantidade de itens do nosso array $semana.
Mas repare que a nossa função linha() foi chamada com um parâmetro, que é
um array com os dias da semana. Então, precisamos alterar a função linha() para
receber este array e exibir seus valores. Altere a função linha() para ficar como
esta:
<?php
function linha($semana)
{
echo "
<tr>
<td>{$semana[0]}</td>
<td>{$semana[1]}</td>
<td>{$semana[2]}</td>
<td>{$semana[3]}</td>
<td>{$semana[4]}</td>
<td>{$semana[5]}</td>
<td>{$semana[6]}</td>
</tr>
24
Casa do Código
Capítulo 3. Construindo um calendário com PHP
";
}
Veja que agora ela recebe um parâmetro chamado $semana e o conteúdo de
$semana é exibido usando os colchetes para acessar cada um dos itens. Atenção:
Um array inicia seus itens no número zero! Por isso, exibimos do zero ao seis.
Agora precisamos fazer mais uma alteração para exibir o calendário que temos
até agora. Na tabela, retire aquelas cinco chamadas para a função linha() e troque
por uma chamada para a função calendario():
<table border="1">
<tr>
<th>Dom</th>
<th>Seg</th>
<th>Ter</th>
<th>Qua</th>
<th>Qui</th>
<th>Sex</th>
<th>Sáb</th>
</tr>
<?php calendario(); ?>
</table>
Agora, acesse localhost/calendario.php, ou atualize a página, caso já es-
teja aberta, e você verá um resultado parecido com este:
Figura 3.4: Calendário, mas sem todos os dias do mês
Já está parecido com um calendário! Mas ele está exibindo apenas até o dia 28!
Isso está acontecendo por estarmos verificando se o número de itens na variável
25
3.4. Entendendo e se entendendo com os erros
Casa do Código
$semana é igual a 7. O problema é que este número não vai chegar a sete, já que
de 28 para 31 são apenas 3 dias de diferença.
3.4
Entendendo e se entendendo com os erros
Uma possível solução seria chamar a função linha() após o laço while passando
o array semana com menos dias. Altere seu código para fazer esta chamada:
<?php
function calendario()
{
$dia = 1;
$semana = array();
while ($dia <= 31) {
array_push($semana, $dia);
if (count($semana) == 7) {
linha($semana);
$semana = array();
}
$dia++;
}
linha($semana);
}
?>
Atualize a página. Veja que os dias estão sendo exibidos, mas perceba a quanti-
dade de erros que apareceram!
26
Casa do Código
Capítulo 3. Construindo um calendário com PHP
Figura 3.5: Calendário completo, mas com alguns erros
Veja que o erro informado é Undefined offset: 3. Isso quer dizer que ele
está tentando acessar o índice 3 no array $semana e não está encontrando. O mesmo
acontece com os índices 4, 5 e 6, por isso esse monte de erros apareceu.
A importância das mensagens de erro
É comum que programadores novatos ignorem as mensagens de erro
da linguagem. Isso é um problema, pois quando alguma falha acontece,
a linguagem faz o melhor possível para indicar o que aconteceu. Quando
topar com um erro no PHP, tente ler a mensagem e compreender o que
houve. Em geral, ele diz a linha do erro e explica bem o problema.
3.5
Meu PHP não mostrou os erros!
Pode acontecer de você não enxergar os erros gerados, pois seu PHP pode estar con-