Você está na página 1de 3

Aula 21-08-2007

Funções
Funções definidas pelo usuário
Uma função pode ser definida usando-se a sintaxe como a seguinte:

Exemplo 17.1. Pseudo-código que de demonstração de uma função

<?php
function foo ($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Exemplo de função.\n";
return $valor_retornado;
}
?>

Qualquer código PHP válido pode aparecer dentro de uma função, mesmo outras funções e
definições de classes. Nomes de funções seguem as mesmas regras que outros rótulos no PHP. Um
nome de função válido começa com uma letra ou um sublinhado, seguido, seguido por qualquer
número de letras, números ou sublinhado. (extraído de www.php.net)

Ex.1: Função que não retorna valor


<?
# Função sem retorno e sem parâmetros

function helloworld() {
echo “Olá, mundo!”;
}

helloWorld() // aqui, chamamos a função!

# Função com retorno e sem parâmetros

function helloWorld2() {
return “Olá, mundo!”;
}

echo helloWorld2();

# Função sem retorno e com parâmetro

function helloWorld3($nome) {
echo “Olá, $nome”;
}

helloWorld3(“Regis”);

# Função com retorno e com parâmetro

function helloWorld4($nome) {
return “Olá, $nome”;
}

echo helloWorld4(“Régis”);
?>
Exercícios: fazer uma função que informe se um número passado por parâmetro é par ou ímpar.
Fazer a mesma coisa, mas usando o operador de bit (&).

Recursão
A recursividade na programação de computadores envolve a definição de uma função que pode
invocar a si própria. Um exemplo de aplicação da recursividade pode ser encontrado nos
analisadores gramaticais recursivos para linguagens de programação. A grande vantagem da
recursão está na possibilidade de usar um programa de computador finito para definir, analisar ou
produzir um estoque potencialmente infinito de sentenças, designs ou outros dados.

Em geral, uma definição recursiva é definida por casos: um número limitado de casos base e um
caso recursivo. Os casos base são geralmente situações triviais e não envolvem recursão.

Um exemplo comum usando recursão é a função para calcular o fatorial de um natural N. Nesse
caso, no caso base o valor de 0! é 1. No caso recursivo, dado um N>0, o valor de N! é calculado
multiplicando por N o valor de (N-1)!, e assim por diante, de tal forma que N! tem como valor N *
(N-1) * (N-2) * ... * (N-N)!, onde (N-N)! representa obviamente o caso base. (extraído de
www.wikipedia.org).

Exemplos de recursão
<?
# Recursão: Fatorial
# Mas antes, faremos usando iteração

function fatorial_iterativo($a) {
$b = 1;
echo "Fatorial de $a: ";
for ($i=$a; $i>=2; $i--) {
$b *= $i;
echo $i."*";
}
echo "1 = ".$b;
}

fatorial_iterativo(5);

# Agora, usando recursão

function fatorial($number) {

$result = 1;
while ($number > 0) {
$result *= $number;
$number--;
}
return $result;
}

echo fatorial(3);
echo "<hr>";
# Agora, usando recursão...

function fatorial_recursivo($number) {

if ($number < 2) {
return 1;
} else {
return ($number * fatorial_recursivo($number-1));
}
}

echo fatorial_recursivo(3);

# A série de Fibonacci é dada pela função


# F(n) = F(n-1)+F(n-2)
# onde F(1) = 1 e F(2) = 1;

function fibonacci ($n)


{
if ($n == 1 || $n == 2)
{
return 1;
}
else
{
return fibonacci($n - 1)+fibonacci($n - 2);
}
}
// Agora, mostrando a série até o seu 10 elemento...
for ($i=1; $i<=10; $i++)
echo fibonacci($i).", ";
echo "<hr>";

?>

include e require

A instrução include() inclui e avalia o arquivo informado. A documentação a seguir se aplica


também a require(). Esses dois construtores são idênticos a exceção de como eles manipulam erros.
Ambas produzem um Warning mas require() resultará em um Fatal Error. Em outras palavras,
utilize require() se você deseja que um arquivo faltando interrompa o processamento da página.
include() não se comporta da mesma maneira, permitindo que o script continue nessas situações.
Em todo caso, vale a pena confirmar a configuração da diretiva include_path. Esteja avisado que
um erro de interpretação no arquivo incluído não causa a parada do processamento em versões do
PHP anteriores a PHP 4.3.5. A partir desta versão, causa.

Arquivos a incluir são procurados primeiramente no include_path relativo ao diretório atual de


trabalho e depois no include_path relativo ao diretório atual do script. “Por exemplo, se seu
incluide_path é “.”, o diretório atual é /www/, se você incluiu include/a.php e há um b.php nesse
arquivo, b.php será procurado primeiro em /www/ e somente depois em /www/include/. Se o nome
do arquivo começa com ./ ou ../, ele é procurado apenas no include_path relativo ao diretório de
rabalho atual.

Quando um arquivo é incluído, seu código entra no escopo de variável da linha onde a inclusão
ocorre. Qualquer variável disponível da linha onde a chamada da inclusão ocorre estará disponível
para o arquivo incluído, daquele ponto em diante. Entretanto, todas as funções e classes definidas
no arquivo incluído tem um escopo global.

Ex.

include “basic-functions.inc”
include “advanced-function.inc”;
require “basic-functions.inc”

include_once($_SERVER[‘DOCUMENT_ROOT’].”/path/to/include_file”);
require_once($_SERVER[‘DOCUMENT_ROOT’].”/path/to/include_file”);