A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa

PHP rapidinho

Qui

20

Abr

2006


15:35

(155 votos, média 4.52 de 5) 


Funções

Funções são perfeitas para programadores preguiçosos... eeepa! Não é por aí! Veja a coisa da seguinte forma: você está escrevendo um aplicativo que vai repetir determinada tarefa um zilhão de vezes. Você vai escrever o mesmo código um zilhão de vezes? É claro que não. O mais fácil é escrever uma função e usá-la toda vez que a tarefa tiver que ser executada.

Encare as funções como ferramentas. Ninguém joga fora a chave de fenda ou o martelo depois que apertou o parafuso ou meteu o prego na parede. O motivo é que, para realizar estas mesmas tarefas, podemos usar novamente as mesmas ferramentas (tá certo que tem neguinho metendo parafuso na parede com martelo, mas isto são outros quinhentos). Vamos a um exemplo de função em PHP:

\n"); } martelo(); martelo(); martelo(); ?>

Vamos martelar, perdão, destrinchar este código: a primeira coisa foi definir uma função, aquela que vai funcionar como ferramenta. Indicamos que estamos criando uma função através da palavra-chave function. Logo a seguir vem o nome da própria, neste caso 'martelo'. Observe que o nome da função é seguido por dois parênteses, assunto ao qual voltaremos logo mais. Em seguida definimos a área do 'bloco da função' com as tradicionais chaves e, nesta área, inserimos o código que deve ser executado quando a função for chamada. A única coisa que a nossa função 'martelo' faz é escrever na tela que martelos americanos fazem bang. Neste ponto, nossa ferramenta está pronta e ainda não aconteceu nada.

O interpretador PHP passa para a próxima linha e encontra uma chamada à função 'martelo' - vai para a área da função e põe na tela "Bang!...". Retorna para a linha de chamada e vai para a próxima. Põe "Bang!..." na tela e volta para encontrar a terceira chamada. Põe "Bang..." na tela e termina o script.

Moral da história: usamos a ferramenta três vezes, porém só escrevemos o código uma vez. A grande vantagem é que esta função pode ser chamada de qualquer ponto do script, ou seja, uma vez definida a função fica à nossa disposição 'for ever'.

Parâmetros de funções

Em algumas ocasiões queremos que uma função seja executada de acordo com alguma "ordem" específica, do tipo bata o martelo com a mão direita ou bata com a mão esquerda (temos que dar uma chance aos canhotos smile Estas "ordens" são recebidas através de variáveis que são enviadas a funções com o nome de parâmetros. Digamos que a chamada à função martelo indique o tipo de martelo que deve ser usado:

\n"); } martelo("Bang! O barulho do martelo americano!"); martelo("Kaput! O barulho do martelo alemão!"); martelo("Póc! O barulho do martelo brasileiro!"); ?>

Novamente criamos a função martelo() só que, desta vez, há uma variável entre os parênteses - a variável $tipo. Esta variável é o parâmetro da função. Toda vez que a função for chamada ela espera receber um parâmetro que, neste caso, é do tipo string. O nome dos parâmetros não são importantes porque não é preciso conhecê-los quando se chama a função. Só é preciso enviar parâmetros do tipo certo e na ordem correta.

O parâmetro só será usado dentro da função e seu valor pode ser obtido referindo-se ao nome da variável declarada juntamente com a declaração da função. É claro que, quanto mais explícito for o nome do parâmetro, mais fácil fica programar. $tipo é melhor do que $x, né não?

Outro exemplo:

\n"); } martelo("Bang!", "na cabeça do gringo"); martelo("Kaput!", "no dedão do alemão"); martelo("Póc!", "num ovo"); ?>

A esta altura você já sabe que a primeira chamada à função martelo(), agora feliz possuidora de dois parâmetros do tipo string, põe na tela a frase "Batendo na cabeça do gringo o barulho é Bang!" na primeira chamada. Na segunda chamada, o resultado será "Batendo no dedão do alemão o barulho é Kaput!" e, na terceira, "Batendo num ovo o barulho é Póc!". Mas o mais importante é saber que esta função espera dois parâmetros (nem mais e nem menos), do tipo string, que o primeiro se refere ao barulho produzido e o segundo ao lugar. Se sobrarem ou faltarem parâmetros, ou se o tipo não for o correto, as mensagens que você vai receber serão apenas mensagens de erro!

Usando return

Em algumas ocasiões, ao invés de querer que uma função aja diretamente, você precisa que ela retorne algo que possa ser utilizado na sequência do script ou por alguma outra função. As funções anteriores são exemplos de funções que agem diretamente e não devolvem apenas um texto na tela. Quando necessitamos de um retorno, as declarações de 'return' entram em ação. Veja um exemplo de uma destas situações:

Peraí! Este código tá muito complicado! Se é isto o que você está pensando, pode sossegar. Aqui vai a explicação:

  • Primeiro definimos uma função chamada 'divideDoisNumeros' que pede dois parâmetros. Esta função simplesmente divide o primeiro parâmetro pelo segundo, guarda o resultado na variável $resultado e, logo em seguida, retorna (return) o valor desta variável. Podemos dizer que ela 'devolve' o resultado.
  • Depois disso definimos uma função chamada 'multiplicaDoisNumeros' que também espera dois parâmetros. Esta função multiplica os dois parâmetros e devolve o resultado.
  • A seguir, chamamos a função 'divideDoisNumeros'. Se só chamássemos a função divideDoisNumeros(), seu valor de retorno estaria perdido. Como queremos este valor, definimos uma variável denominada 'resultadoDivide' para armazenar o resultado, ou seja, $resultadoDivide é igual ao valor de retorno da função divideDoisNumeros(). Como enviamos os parâmetros 4 e 2, e como sabemos que a função devolve a divisão dos dois parâmetros, fica claro que nossa variável $resultadoDivide acaba guardando o valor 2.
  • Depois declaramos a variável $resultadoMultiplica para podermos "caçar" o resultado da função multiplicaDoisNumeros(). O primeiro parâmetro desta função é a variável $resultadoDivide e o segundo é 10. Como sabemos que o valor de $resultadoDivide é 2, multiplicaDoisNumeros($resultadoDivide, 10) é o mesmo que multiplicaDoisNumeros(2, 10). Portanto, a variável $resultadoMultiplica recebe o valor 20 porque a função multiplicaDoisNumeros() multiplica 2*10.
  • Daí são dois palitos: a função echo() põe 20 na tela e o script é encerrado. Viu só? Foi menos complicado do que parecia

Predefinindo parâmetros

Agora que você já sabe como funcionam os parâmetros, vamos ver o que vem a ser uma predefinição ou pré-inicialização. Predefinir significa atribuir um valor 'default' a uma variável. Você vai encontrar a palavra 'default' trocentas vezes em textos técnicos, manuais, tutoriais, etc. A tradução literal de default é falta, omissão. Um valor default é o valor que uma variável assume quando nenhum valor lhe é atribuído. Para tornar as coisas um pouco mais claras, veja o exemplo abaixo:

\n"); $resultadoControlado = divideDoisNumeros(12, 3); echo("$resultadoControlado<br>\n"); ?>

A declaração da função divideDoisNumeros() possui apenas uma diferença em relação à declaração anterior: ao definir o segundo parâmetro, foi-lhe atribuído um valor ($numeroDois = 2). O valor 2 é o valor default do parâmetro $numeroDois.

Quando atribuímos o valor da variável $resultadoDefault, chamamos a função divideDoisNumeros() com apenas um parâmetro. Isto significa que o parâmetro $numeroUm recebe o valor 6 e que o parâmetro $numeroDois nada recebe. Ahá!!! Se nada é atribuído ao parâmetro $numeroDois, então ele assume o valor default e passa a guardar o valor 2. A função divideDoisNumeros() faz a divisão de 6 por 2 e devolve o resultado 3. A função echo() põe $resultadoDefault na tela e vemos o 3 aparecer.

Para atribuir um valor à variável $resultadoControlado, chamamos a mesma função divideDoisNumeros() porém, desta vez, com dois parâmetros. Como atribuímos o valor 3 ao parâmetro $numeroDois da função, não há necessidade de usar o valor default - dizemos que o valor default foi dominado ou controlado. Neste caso, divideDoisNumeros() devolve a divisão de 12 por 3 e a variável $resultadoControlado passa a ter o valor 4.

Dentre todos os elementos do PHP, as funções são um dos mais importantes. O pessoal do PHP já produziu muitíssimas funções que podem ser encontradas no manual da linguagem. Antes de criar suas próprias funções é aconselhável dar uma olhada no manual. Podes crer, você perde menos tempo procurando uma função do que criando uma que já exista.

Informações adicionais