Cap. 2 - PHP Intermediário
2.1 - Funções
Objetivo: Estudar aspectos específicos de Arrays e Strings em PHP.- 1. Funções
- 2. Criação de Funções
- 3. Variáveis Globais e Estáticas
- 4. Passagem de Parâmetros
- 5. Recursão
- 6. Incluindo Arquivos em um Programa PHP
- 7. Exemplos
- 8. Exercícios
Introdução
Nessa aula veremos as estruturas um pouco mais sobre arrays e funções em PHP.1. Funções
Na Matemática, funções podem ser definidas a partir de relações entre conjuntos. Geralmente tem-se um conjunto domínio e um conjunto imagem, e a função define uma regra entre eles. Um valor, pertecente ao domínio, é colocado dentro da regra, resultando num novo valor, pertencente ao conjunto imagem.
Em computação é a mesma coisa...
Uma função (no contexto da programação) é um programa que relaciona parâmetros de entrada com ações, valores ou parâmetros de saída.
Veja a figura abaixo.

Vantagem da função em programação: reutilização do código.
2. Criação de Funções
2.1 Funções em PHP: Criação
A função em PHP é criada a partir da palavra reservada function. Para definir a função portanto, escreve-se function seguido do nome da função e dos parâmetros de entrada. O nome da função deve iniciar com uma letra. O argumento de saída é definido com o comando return. Veja o exemplo a seguir.Exemplo
<?php
//funcao soma dois numeros
function soma_2($x,$y)
{
return $x+$y;
}
?>
2.2 Exemplo
Naturalmente a função precisa ser chamada dentro de um programa (principal). Veja o exemplo a seguir. Nele misturamos HTML com PHP (vamos ver isso mais na frente no curso). Repare nos detalhes do exemplo. Repare como a função é chamada.
<html>
<h2>Exemplo de Função em PHP</h2>
<?php
//funcao soma dois numeros
function soma_2($x,$y)
{
return $x+$y;
}
?>
<?php $x=2;$y=3.3l;?>
<hr>
<h4>Resultado da soma de <?php echo $x." + ".$y. "<br>" ?> </h4>
<?php
echo $x." + ".$y." = ".soma_2($x,$y);
?>
</html>
3. Variáveis Globais e Estáticas
3.1 Escopo da Função
Variáveis Globais e Locais
O escopo da função determina como (ou em que nível de hierarquia) o dado pode ser acessado. Temos o acesso local, a partir de váriaveis locais ou acesso global, feito a partir de variáveis globais.
As variáveis que passam a existir (que foram declaradas ou criadas) dentro da função são locais. Elas são acessadas apenas dentro da função.
Variáveis globais, ou seja, que podem ser acessadas de fora da função devem ser declaradas como globais, utilizando a palavra reservada global.
Veja o exemplo, extraído de [1].
<?php
$total = 0;
function km2mi($quilometros)
{
global $total;
$total +=$quilometros;
return $quilometros*0.6;
}
echo "percorreu ".km2mi(100)."milhas \n";
echo "percorreu ".km2mi(200)."milhas \n";
echo "percorreu no total ".$total."quilometros \n";
?>
Variáveis Estáticas
O PHP possui uma categoria de variável denominada variável estática, que mantém seu o valor atribuído na última execucação.
Declara-se a variável estática com o operador staticVeja o exemplo, extraído de [1].
<?php
function percorre($quilometros)
{
static $total;
$total +=$quilometros;
echo "percorreu mais $quilometros do total de $total <br>";
}
percorre(100);
percorre(200);
percorre(300);
?>
Atenção
Repare nos detalhes do programa:
a função não retorna nada
a forma como a função echo é chamada
Veja mais exemplos usando array em php.net
4. Passagem de Parâmetros
Assim como em C, o PHP possui dois tipos de passagem de parâmetros: por valor ou por referência.
Por default, os dados são passados por valor.
Para efetuar a passagem de parâmetro por referência, deve-se usar o operador & na frente do parâmetro.
Veja os dois exemplos a seguir.Passagem por Valor
<?php
function Incrementa($variavel, $valor)
{
$variavel+=$valor;
}
$a=10;
Incrementa($a,20);
echo $a;
?>
Atenção
Repare nos detalhes do programa:
a função não retorna usando-se return
a função retorna o valor na variável $a
...mas $a já tem um valor definido no programa
...tem algo errado com essa função, não tem? a idéia era que $a contivesse o valor de $variavel...
...podiamos ter usado um return para $variavel...
Uma solução para o problema acima é usar a passagem por referência.
Passagem por Referência
<?php
function Incrementa(&$variavel, $valor)
{
$variavel+=$valor;
}
$a=10;
Incrementa($a,20);
echo $a;
?>
Referência, em PHP, significa acessar o mesmo conteúdo de variável através de vários nomes.
A referência em PHP serve para definir a posição (endereço) da variável na memória. Veja no exemplol abaixo que $a e $b "apontam" para o mesmo lugar:
Estude esse outro exemplo:<?php
$a =& $b;
?>
<?php
function foo(&$var) { }
foo($a); // $a é "criada" e setada par null
$b = array();
foo($b['b']);
var_dump(array_key_exists('b', $b)); // bool(true)
$c = new StdClass;
foo($c->d);
var_dump(property_exists($c, 'd')); // bool(true)
?>
Veja mais sobre referências em PHP no php.net.
5. Recursão
Assim como na linguagem C é possível fazer uso da recursão.
Veja o exercício 1 na seção Exercícios.A recursividade é um recurso da programação no qual uma função chama a si mesma. Em várias situações essa propriedade facilita a execução do códgio.
6. Incluindo Arquivos em Programas PHP
Em PHP é frequente a necessidade de se incluir arquivos em nosso programa principal. Geralmente isso acontece como consequencia da organização do programa: é melhor separarmos os programas em diferentes arquivos.
Isso é feito com o comandos include e require e seus derivados. Veja a seguir.
6.1 Comando include
Comando include() inclui e avalia um arquivo em um programa PHP. O código do arquivo incluido entra no escopo do programa, tornando-se disponível a partir da linha de inclusão. Se o arquivo não existir, produzirá uma mensagem de advertência (warning)
Exemplo
Nesse exemplo temos dois programas: o primeiro é uma função que é incluida no segundo. O primeiro arquivo chama-se biblioteca.php e é incluido no segundo, teste.php.
Arquivo biblioteca.php
<?php
//funcao quadrado
function quadrado($numero)
{
return $numero*$numero;
}
?>
Arquivo teste.php
<?php
//carrega o arquivo biblioteca.php
include 'biblioteca.php'/
echo quadrado(4);
?>
6.2 Comando require()
O comando require() é semelhante ao comando include() com a diferença que ao invés de produzir uma advertência quando ocorre um erro ele produz uma mensagem de erro (Fatal Error).6.3 Comando include_once()
Funciona da mesma forma que o include a não ser que o arquivo informado já tenha sido incluido. Nesse caso ele não o inclui novamente. Esse comando é útil caso o programa necessite passar mais de uma vez pelo comando include()
6.4 Comando require_once()
Funciona como o comando require, mas só inclui o arquivo uma vez.7. Exemplos
Estude os exemplos contidos em php.net - funções8. Exercícios de Revisão
1. Recursão
Faça uma função em PHP para calcular o fatorial de um número inteiro. Rode um programa em PHP para testá-la.2. Programa em PHP
Faça uma função para calcular raizes de equação do segundo grau em arquivo. Faça um programa (em outro arquivo) para chamar essa função.
Use passagem por valor.
3. Programa em PHP
Repita o programa do Exercício anterior usando passagem por referência.