LabMM4 (T13 - 12/13) - Funções

Preview:

DESCRIPTION

 

Citation preview

PHP: Funções

Carlos SantosLabMM 4 - NTC - DeCA - UAAula 13, 09-04-2013

Funções

Nome da funçãocódigo da função

parâmetros de entrada valores de saída

Funções: características

Permitem a modularidade e reutilização do código

Permitem uma gestão centralizada do código

São invocadas/chamadas quando são necessárias

• Podem possuir parâmetros de entrada• Podem retornar valores de saída

Funções pré-definidas (built-in)

• Mais de 1000 numa instalação standard do PHP• Funções adicionais disponíveis através da instalação de pacotes/

bibliotecas

Funções definidas pelo utilizador

Declaração e invocação de uma função

Declarar uma função

• function nomefuncao(parâmetros/args) { codigodafuncao}

• function escreve_ola() { echo “Olá. Esta é a minha primeira função!";}

Invocar/chamar uma função

• escreve_ola();

Passagem de parâmetros

Valores passados para dentro da função aquando da sua chamada

• <?php function calctaxa($preco, $taxa) { $total = $preco + ($preco * $taxa); echo “custo total: $total" . "<br />"; }

$a = 2; $b = 3;

calctaxa($a, $b);?>

> “custo total: 8”

Passagem de parâmetros por valor

As alterações efetuadas dentro da função aos valores armazenados nos parâmetros passados por valor são ignoradas fora da função

• <?php function calctaxa($preco, $taxa) { $total = $preco + ($preco * $taxa); $preco++; $taxa++; echo $preco . "<br />"; echo $taxa . "<br />"; echo “custo total: $total" . "<br />"; } $preco = 2; $taxa = 2; calctaxa($preco, $taxa); echo $preco . "<br />"; echo $taxa;?>

Passagem de parâmetros por valor

As alterações efetuadas dentro da função aos valores armazenados nos parâmetros passados por valor são ignoradas fora da função

• <?php function calctaxa($preco, $taxa) { $total = $preco + ($preco * $taxa); $preco++; $taxa++; echo $preco . "<br />"; // 3 echo $taxa . "<br />"; // 3 echo “custo total: $total" . "<br />"; // ...6 } $preco = 2; $taxa = 2; calctaxa($preco, $taxa); echo $preco . "<br />"; // 2 echo $taxa; // 2?>

Passagem de parâmetros por referência

As alterações efetuadas dentro da função aos valores armazenados nos parâmetros passados por valor são visíveis fora da função

• <?php function calctaxa($preco, &$t) { $total = $preco + ($preco * $t); $preco++; $t++; echo $preco . "<br />"; echo $t . "<br />"; echo “custo total: $total" . "<br />"; } $preco = 2; $taxa = 2; calctaxa($preco, $taxa); echo $preco . "<br />"; echo $taxa;?>

Passagem de parâmetros por referência

As alterações efetuadas dentro da função aos valores armazenados nos parâmetros passados por valor são visíveis fora da função

• <?php function calctaxa($preco, &$t) { $total = $preco + ($preco * $t); $preco++; $t++; echo $preco . "<br />"; // 3 echo $t . "<br />"; // 3 echo “custo total: $total" . "<br />"; // ...6 } $preco = 2; $taxa = 2; calctaxa($preco, $taxa); echo $preco . "<br />"; // 2 echo $taxa; // 3?>

Passagem de parâmetros com valores por defeito

Valor atribuído por defeito ao parâmetro, caso a invocação da função não seja feita com esse parâmetro

• <?php function calctaxa($preco, $taxa=3) { $total = $preco + ($preco * $taxa); $preco++; $taxa++; echo $preco . "<br />"; echo $taxa . "<br />"; echo “custo total: $total" . "<br />"; } $pr = 2; $ta = 2; calctaxa($pr);?>

Passagem de parâmetros com valores por defeito

Valor atribuído por defeito ao parâmetro, caso a invocação da função não seja feita com esse parâmetro

• <?php function calctaxa($preco, $taxa=3) { $total = $preco + ($preco * $taxa); $preco++; $taxa++; echo $preco . "<br />"; // 3 echo $taxa . "<br />"; // 4 echo “custo total: $total" . "<br />"; // ...8 } $pr = 2; $ta = 2; calctaxa($pr);?>

Passagem de parâmetros com parâmetros opcionais

Caso um dado parâmetro seja opcional, na invocação da função sem esse parâmetro ser-lhe-á atribuído um valor vazio/nulo

• <?php function calctaxa($preco, $taxa=””) { $total = $preco + ($preco * $taxa); $preco++; $taxa++; echo $preco . "<br />"; echo $taxa . "<br />"; echo “custo total: $total" . "<br />"; } $pr = 2; $ta = 2; calctaxa($pr);?>

Passagem de parâmetros com parâmetros opcionais

Caso um dado parâmetro seja opcional, na invocação da função sem esse parâmetro ser-lhe-á atribuído um valor vazio/nulo

• <?php function calctaxa($preco, $taxa=””) { $total = $preco + ($preco * $taxa); $preco++; $taxa++; echo $preco . "<br />"; // 3 echo $taxa . "<br />"; // 1 echo “custo total: $total" . "<br />"; //... 2 } $pr = 2; $ta = 2; calctaxa($pr);?>

Passagem de parâmetros com parâmetros opcionais

Caso um dado parâmetro seja opcional, na invocação da função sem esse parâmetro ser-lhe-á atribuído um valor vazio/nulo

• <?phpfunction somanumeros($num1=“”, $num2="", $num3="") { $total = $num1 + $num2 + $num3; echo "soma: $total" . "<br />";}!

somanumeros(1,2,3);somanumeros(1,2);somanumeros(1,"",3);somanumeros(1);somanumeros();?>

Passagem de parâmetros com parâmetros opcionais

Caso um dado parâmetro seja opcional, na invocação da função sem esse parâmetro ser-lhe-á atribuído um valor vazio/nulo

• <?phpfunction somanumeros($num1=“”, $num2="", $num3="") { $total = $num1 + $num2 + $num3; echo "soma: $total" . "<br />";}!

somanumeros(1,2,3); // “soma: 6”somanumeros(1,2); // “soma: 3”somanumeros(1,"",3); // “soma: 4”somanumeros(1); // “soma: 1”somanumeros(); // “soma: 0”?>

Retorno de valores de saída

A função devolve um ou mais valores que poderão ser atribuídos a variáveis aquando da sua invocação/chamada

• <?phpfunction somanumeros($num1=“”, $num2="", $num3="") { $total = $num1 + $num2 + $num3; return $total;}!

$resultado = somanumeros(1,2,3);echo “<br />” . somanumeros(1,2,3);?>

Retorno de valores de saída

A função devolve um ou mais valores que poderão ser atribuídos a variáveis aquando da sua invocação/chamada

• <?phpfunction somanumeros($num1=“”, $num2="", $num3="") { $total = $num1 + $num2 + $num3; return $total;}!

$resultado = somanumeros(1,2,3);echo “<br />” . somanumeros(1,2,3); // 6?>

É possível retornar múltiplos valores através de arrays, ou seja, o valor de retorno pode ser um array com múltiplos elementos!

Recursividade

Funções recursivas são funções que se invocam a si próprias.

Exemplo: Cálculo da soma dos n números naturais, menores ou iguais a n

• <?php function soman($n) { if ($n <=0) { // impede recursividade infinita return "cálculo não efetuado"; } elseif ($n==1) { // fim de recursividade return 1; } else { return $n + soman($n-1); } }!?>

Recursividade

• <?php function soman($n) { if ($n <=0) { // impede recursividade infinita return "cálculo não efetuado"; } elseif ($n==1) { // fim de recursividade return 1; } else { return $n + soman($n-1); } }! echo "<br />" . soman(-1); echo "<br />" . soman(0); echo "<br />" . soman(1); echo "<br />" . soman(3); echo "<br />" . soman(4);?>

Recursividade

• <?php function soman($n) { if ($n <=0) { // impede recursividade infinita return "cálculo não efetuado"; } elseif ($n==1) { // fim de recursividade return 1; } else { return $n + soman($n-1); } }! echo "<br />" . soman(-1); // “Cálculo não efetuado” echo "<br />" . soman(0); // “Cálculo não efetuado” echo "<br />" . soman(1); // 1 echo "<br />" . soman(3); // 6 echo "<br />" . soman(4); // 10?>

Exemplo

Qual o resultado?

• <?phpfunction soma($a, $b) { $a++; $b++; $c = $a + $b; echo "Dentro da função: ". $a . " | ". $b . " | ". $c . "<br />"; return $c;}

$a = 2;$b = 3;$c = 0;echo "Antes da função: ". $a . " | ". $b . " | ". $c . "<br />";$resultado = soma($a, $b);echo "Depois da função: ". $a . " | ". $b . " | ". $c . "<br />";echo "Resultado: ". $resultado;?>