PHP: Funções
Carlos Santos
LabMM 4 - NTC - DeCA - UA
Aula 13, 09-04-2013
Funções




                            Nome da função
    parâmetros de entrada                         valores de saída
                               código da função
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
  • <?php
    function 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
  • <?php
    function 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
  • <?php
    function 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
  • <?php
    function 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?
  • <?php
    function 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;
    ?>

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

  • 1.
    PHP: Funções Carlos Santos LabMM4 - NTC - DeCA - UA Aula 13, 09-04-2013
  • 2.
    Funções Nome da função parâmetros de entrada valores de saída código da função
  • 3.
    Funções: características Permitem amodularidade 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
  • 4.
    Declaração e invocaçãode 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();
  • 5.
    Passagem de parâmetros Valorespassados 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”
  • 6.
    Passagem de parâmetrospor 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; ?>
  • 7.
    Passagem de parâmetrospor 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 ?>
  • 8.
    Passagem de parâmetrospor 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; ?>
  • 9.
    Passagem de parâmetrospor 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 ?>
  • 10.
    Passagem de parâmetroscom 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); ?>
  • 11.
    Passagem de parâmetroscom 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); ?>
  • 12.
    Passagem de parâmetroscom 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); ?>
  • 13.
    Passagem de parâmetroscom 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); ?>
  • 14.
    Passagem de parâmetroscom 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 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(); ?>
  • 15.
    Passagem de parâmetroscom 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 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” ?>
  • 16.
    Retorno de valoresde 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 • <?php function somanumeros($num1=“”, $num2="", $num3="") { $total = $num1 + $num2 + $num3; return $total; }! $resultado = somanumeros(1,2,3); echo “<br />” . somanumeros(1,2,3); ?>
  • 17.
    Retorno de valoresde 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 • <?php function 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!
  • 18.
    Recursividade Funções recursivas sãofunçõ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); } }! ?>
  • 19.
    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); ?>
  • 20.
    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 ?>
  • 21.
    Exemplo Qual o resultado? • <?php function 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; ?>