Curso de PHP – Funções Fábio M. Pereira 
UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA – UESB 
UNIDADE ORGANIZACIONAL DE INFORMÁTICA - UINFOR
Roteiro 
•Introdução 
•Chamando uma Função 
•Definindo uma Função 
•Escopo de Variáveis 
–Variáveis Globais 
–Variáveis Estáticas 
•Parâmetros de Função 
–Passagem de Parâmetros por Valor 
–Passagem de Parâmetros por Referência 
–Parâmetros Default 
–Parâmetros Variáveis 
–Parâmetros Faltando 
–Definição de Tipo 
•Retornando Valores 
•Variáveis com Nomes de Funções 
•Funções Anônimas
FUNÇÕES Introdução
Funções 
•Uma função é um bloco nomeado de código que realiza uma tarefa específica 
•Possui a possibilidade de receber um conjunto de valores (parâmetros) e de retornar um único valor 
•Aumenta a legibilidade do código por isolar o código que realiza tarefas específicas
FUNÇÕES Chamando uma Função
Chamando uma Função 
•Funções em um programa PHP podem ser embutidas ou definidas pelo usuário 
•Independentemente da origem, todas as funções são avaliadas da mesma maneira: 
$someValue = function_name( [ parameter, ... ] ); 
•O número de parâmetros que uma função requer pode variar de uma função para outra (e também na mesma função) 
•Exemplos: 
// strlen() é uma função interna que retorna o 
// tambanho de umastring 
$length = strlen("PHP"); // $length é agora 3
Chamando uma Função 
•Exemplos (cont.): 
// sin() e asin() são funções matemáticas 
// seno e arco-seno 
// $result é o seno do arco-seno de 1: 
$result = sin(asin(1)); 
// unlink() apaga um arquivo 
// retorna falso se falhar 
$result = unlink("functions.txt"); 
•Reescrevendo a última função: 
$result = unlink("functions.txt") 
or die("Falha na Operação!");
FUNÇÕES Definindo uma Função
Definindo uma Função 
•Para criar uma função, devemos utilizar a seguinte sintaxe: 
function [&] nome_da_função([parametros[, ...]]) 
{ 
lista de instruções 
} 
•A lista de instruções pode incluir HTML 
•Podemos declarar uma função PHP que não contenha nenhum código PHP 
•Exemplo: 
<?php function column() 
{ ?> 
<td></td> 
<?php }
Definindo uma Função 
•O nome de uma função pode ser qualquer string que inicie por uma letra ou sublinhado seguido por nenhuma ou mais letras, sublinhados e dígitos 
•Nomes de funções não são sensíveis à caixa, assim sin(1), SIN(1), SiN(1), etc. se referem à mesma função 
•Por convenção, funções internas em PHP são chamadas com todas as letras em minúsculo 
•Tipicamente, funções retornam algum valor 
•Para retornar o valor de uma função, devemos utilizar a instrução return 
•Podemos incluir qualquer quantidade de instruções return em uma função
Exemplos 
•Concatenação de strings: 
function strcat($left, $right) 
{ 
$combinedString = $left . $right; 
return $combinedString; 
} 
•Simplificando: 
function strcat($left, $right) 
{ 
return $left . $right; 
} 
•Em uma página PHP: 
<?php 
function strcat($left, $right) 
{ 
return $left . $right; 
} 
$first = "This is a "; 
$second = " complete sentence!"; 
echo strcat($first, $second);
Aninhamento 
•Podemos aninhar declaração de funções, mas com efeito limitado 
–Não limita a visibilidade da função interna que pode ser chamada de qualquer lugar do programa 
–Não pega automaticamente os argumentos da função externa 
–A função interna só poderá ser chamada dentro do programa após a chamada da função externa 
function outer ($a) 
{ 
function inner ($b) 
{ 
echo "there $b"; 
} 
echo "$a, hello "; 
} 
// saída: "well, hello there reader" 
outer("well"); 
inner("reader");
FUNÇÕES Escopo de Variáveis
Escopo de Variáveis 
•Se não usarmos funções, qualquer variável criada poderá ser usada em qualquer lugar em uma página 
•Funções mantém seus próprios conjuntos de variáveis que são distintos daquelas da página e de outras funções 
–As variáveis definidas em uma função, incluindo os seus parâmetros, não são acessíveis fora da função 
–Por padrão, variáveis definidas fora de uma função não são acessíveis dentro da função 
$a = 3; 
function foo() 
{ 
$a += 2; 
} 
foo(); 
echo $a; // Qual o valor de $a?
Variáveis Globais 
•Se quisermos uma variável de escopo global, que possa ser acessada de dentro de uma função, podemos utilizar a palavra-chave global: 
global var1, var2, ... 
–Parâmetros de função nunca poderão ser variáveis globais 
•Modificando o exemplo anterior: 
$a = 3; 
function foo() 
{ 
global $a; 
$a += 2; 
} 
foo(); 
echo $a; // Qual o valor de $a?
Variáveis Globais 
•Usar global é equivalente a criar uma referência à variável $GLOBALS 
•Então, as instruções a seguir têm o mesmo efeito: 
global $var; 
$var = $GLOBALS['var'];
Variáveis Estáticas 
•Assim como C, PHP dá suporte à declaração de variáveis de função estáticas 
–É inicializada apenas na primeira vez em que a função é chamada 
–Retém o seu valor em todas as chamadas da função 
•Utilizamos a palavra-chave static no primeiro uso para declarar uma variável de função estática: 
static var [= value][, ... ]; 
•Exemplo: 
<?php 
function counter() 
{ 
static $count = 0; 
return $count++; 
} 
for ($i = 1; $i <= 5; $i++) { 
print counter(); 
}
FUNÇÕES Parâmetros de Função
Parâmetros de Função 
•Funções podem esperar, por declaração em sua definição, um número qualquer de argumentos 
•Existem duas maneiras diferentes de passar parâmetros para um função: 
–A primeira e mais comum, por valor 
–A outra, por referência 
•Passagem de parâmetros por valor 
–O argumento é qualquer expressão válida 
–A expressão é avaliada e o valor resultante é atribuído à variável apropriada na função 
–Em todos os exemplos vistos até agora, a passagem de argumentos foi por valor
Passagem de Parâmetros por Referência 
•Passagem por referência permite sobrepor as regras normais de escopo e dar à função acesso direto a uma variável 
–Para ser passado por referência, o argumento deve ser uma variável 
•Indicamos um argumento em particular de uma função que será passado por referência precedendo o nome da variável na lista de parâmetros com o sinal (&) 
<?php 
function doubler(&$value) 
{ 
$value = $value * 2; 
} 
$a = 3; 
doubler($a); 
echo $a;
Passagem de Parâmetros por Referência 
•Apenas variáveis – não constantes – podem ser fornecidas a parâmetros declarados por referência 
•Assim, no exemplo anterior, a instrução a seguir geraria um erro: 
<?= doubler(7); ?> 
•Entretanto, podemos definir um valor padrão para parâmetros passados por referência 
•Mesmo em casos em que não modifiquemos o valor dados, podemos querer que os mesmos sejam passados por referência 
–Quando passamos por valor, PHP faz uma cópia do valor armazenado 
–Particularmente em strings longas e objetos, esta pode ser uma operação cara 
–Passando por referência removemos a necessidade de cópia do valor
Parâmetros Default 
•Para especificar um parâmetro default (padrão), atribuímos o valor do parâmetro na declaração da função 
–O valor atribuído não pode ser uma expressão complexa, apenas um valor escalar 
•Uma função pode ter qualquer número de parâmetros com valores default 
•Entretanto, eles devem ser listados após todos os parâmetros que não tenham valores default 
•Exemplo: 
function getPreferences($whichPreference = 'all') 
{ 
// instruções 
}
Parâmetros Variáveis 
•Uma função pode precisar de um número variável de parâmetros 
•Para declarar uma função com um número variável de parâmetros, simplesmente retire o bloco de parâmetros inteiro 
function getPreferences() 
{ 
// algum código 
} 
•PHP fornece três funções para recuperar os parâmetros passados: 
–func_get_args() retorna um array com todos os parâmetros passados para a função 
–func_num_args() retorna a quantidade de parâmetros fornecidos 
–func_get_arg() retorna um parâmetro específico
Parâmetros Variáveis 
•Uma função pode precisar de um número variável de parâmetros 
•Para declarar uma função com um número variável de parâmetros, simplesmente retire o bloco de parâmetros inteiro 
function getPreferences() 
{ 
// algum código 
} 
•PHP fornece três funções para recuperar os parâmetros passados: 
–func_get_args() retorna um array com todos os parâmetros passados para a função 
–func_num_args() retorna a quantidade de parâmetros fornecidos 
–func_get_arg() retorna um parâmetro específico 
$array = func_get_args(); 
$count = func_num_args(); 
$value = func_get_arg(argument_number);
Exemplo 
<?php 
function countList() 
{ 
if (func_num_args() == 0) { 
return false; 
} 
else { 
$count = 0; 
for ($i = 0; $i < func_num_args(); $i++) { 
$count += func_get_arg($i); 
} 
return $count; 
} 
} 
echo countList(1, 5, 9); // saída: "15"
Parâmetros Variáveis 
•O resultado de qualquer dessas funções não pode ser usado diretamente como um parâmetro para outra função 
–Podemos atribuir o valor a uma variável e então utilizá-lo 
•Não funciona: 
foo(func_num_args()); 
•Funciona: 
$count = func_num_args(); 
foo($count);
Parâmetros Faltando 
•Quando chamamos uma função, podemos passar qualquer número de argumentos 
•Qualquer parâmetro que a função espera que não tiver sido passado permanece sem valor, e uma advertência é gerada para cada um deles
Parâmetros Faltando 
•Quando chamamos uma função, podemos passar qualquer número de argumentos 
•Qualquer parâmetro que a função espera que não tiver sido passado permanece sem valor, e uma advertência é gerada para cada um deles 
function takesTwo($a, $b) 
{ 
if (isset($a)) { 
echo " a is setn"; 
} 
if (isset($b)) { 
echo " b is setn"; 
} 
} 
echo "With two arguments:n"; 
takesTwo(1, 2); 
echo "With one argument:n"; 
takesTwo(1);
Parâmetros Faltando 
•Quando chamamos uma função, podemos passar qualquer número de argumentos 
•Qualquer parâmetro que a função espera que não tiver sido passado permanece sem valor, e uma advertência é gerada para cada um deles 
function takesTwo($a, $b) 
{ 
if (isset($a)) { 
echo " a is setn"; 
} 
if (isset($b)) { 
echo " b is setn"; 
} 
} 
echo "With two arguments:n"; 
takesTwo(1, 2); 
echo "With one argument:n"; 
takesTwo(1); 
With two arguments: 
a is set 
b is set 
With one argument: 
Warning: Missing argument 2 for takes_two() 
in /path/to/script.php on line 6 
a is set
Definição de Tipo 
•Quando definimos uma função, podemos necessitar que um parâmetro seja uma instância de uma classe em particular, uma instância de uma classe que implementa uma interface em particular, um array ou um callable 
•Para atribuir definição de tipo em um parâmetro devemos incluir o nome da classe, array ou callable antes do nome da variável na lista de parâmetros da função 
•Uma definição de tipo não pode ser usada para requerer um tipo escalar em particular (como inteiro ou string)
Definição de Tipo 
•Quando definimos uma função, podemos necessitar que um parâmetro seja uma instância de uma classe em particular, uma instância de uma classe que implementa uma interface em particular, um array ou um callable 
•Para atribuir definição de tipo em um parâmetro devemos incluir o nome da classe, array ou callable antes do nome da variável na lista de parâmetros da função 
•Uma definição de tipo não pode ser usada para requerer um tipo escalar em particular (como inteiro ou string) 
class Entertainment {} 
class Clown extends Entertainment {} 
class Job {} 
function handleEntertainment(Entertainment $a, 
callable $callback = NULL) 
{ 
echo "Handling " . get_class($a) . " funn"; 
if ($callback !== NULL) { 
$callback(); 
} 
} 
$callback = function() 
{ 
// faça alguma coisa 
}; 
handleEntertainment(new Clown); // funciona 
handleEntertainment(new Job, $callback); // erro
FUNÇÕES Retornando Valores
Retornando Valores 
•Funções em PHP podem retornar apenas um único valor através da palavra-chave return 
function returnOne() 
{ 
return 42; 
} 
•Para retornar múltiplos valores podemos utilizar um array 
function returnTwo() 
{ 
return array("Fred", 35); 
} 
•Se nenhum valor é fornecido pela função, ela retornará NULL
Retornando Valores por Referência 
•Por definição, valores são copiados fora da função 
•Para retornar um valor por referência, devemos declarar a função com um & antes do nome e atribuir o valor retornado a uma variável 
$names = array("Fred", "Barney", "Wilma", "Betty"); 
function &findOne($n) { 
global $names; 
return $names[$n]; 
} 
$person =& findOne(1); // Barney 
$person = "Barnetta"; // modifica $names[1]
Retornando Valores por Referência 
•Esta técnica é algumas vezes utilizada para retornar grandes strings ou arrays de forma eficiente 
•Entretanto, como PHP implementa copy-on-write para valores de variáveis, retornar um valor de uma função por referência é tipicamente desnecessário 
•Retornar uma referência a um valor é mais lento que retornar o valor em si
FUNÇÕES Variáveis com Nomes de Funções
Variáveis com Nomes de Funções 
•Da mesma maneira que uma variável pode conter o nome de outra variável, acessado através do construtor $$, podemos adicionar parênteses após uma variável para chamar a função cujo nome é o valor armazenado por ela, por exemplo, $variável() 
•Para saber quando o valor uma variável representa uma função, podemos utilizar a função function_exists(), que pode ser utilizada para prevenir erros
Variáveis com Nomes de Funções 
•Da mesma maneira que uma variável pode conter o nome de outra variável, acessado através do construtor $$, podemos adicionar parênteses após uma variável para chamar a função cujo nome é o valor armazenado por ela, por exemplo, $variável() 
•Para saber quando o valor uma variável representa uma função, podemos utilizar a função function_exists(), que pode ser utilizada para prevenir erros 
switch ($which) { 
case 'first': 
first(); 
break; 
case 'second': 
second(); 
break; 
case 'third': 
third(); 
break; 
}
Variáveis com Nomes de Funções 
•Da mesma maneira que uma variável pode conter o nome de outra variável, acessado através do construtor $$, podemos adicionar parênteses após uma variável para chamar a função cujo nome é o valor armazenado por ela, por exemplo, $variável() 
•Para saber quando o valor uma variável representa uma função, podemos utilizar a função function_exists(), que pode ser utilizada para prevenir erros 
switch ($which) { 
case 'first': 
first(); 
break; 
case 'second': 
second(); 
break; 
case 'third': 
third(); 
break; 
} 
if (function_exists($which)) { 
$which(); 
// se $which é "first", 
// a função first() será chamada, ... 
}
Variáveis com Nomes de Funções 
•Construtores da linguagem, como echo() e isset(), não podem ser chamados através de variáveis com nomes de funções: 
$which = "echo"; 
$which("hello, world"); // não funciona
FUNÇÕES Funções Anônimas
Funções Anônimas 
•Algumas funções PHP utilizam uma função fornecida a elas para realizar parte do seu trabalho 
•Por exemplo, a função usort() utiliza uma função passada a ela como parâmetro para determinar a forma de ordenação dos itens em um array 
•Podemos criar uma função anônima usando a sintaxe normal de definição de uma função, mas a atribuindo a uma variável ou a passando diretamente
Funções Anônimas 
•Algumas funções PHP utilizam uma função fornecida a elas para realizar parte do seu trabalho 
•Por exemplo, a função usort() utiliza uma função passada a ela como parâmetro para determinar a forma de ordenação dos itens em um array 
•Podemos criar uma função anônima usando a sintaxe normal de definição de uma função, mas a atribuindo a uma variável ou a passando diretamente 
$array = array("really long string here, boy", 
"this", "middling length", "larger"); 
// usort usa a função anônima para colocar o array 
// em ordem de tamanho da string 
usort($array, function($a, $b) { 
return strlen($a) - strlen($b); 
}); 
print_r($array);
Funções Anônimas 
•Funções anônimas podem usar as variáveis definidas em seu escopo através da sintaxe use 
•Por exemplo: 
$array = array("really long string here, boy", 
"this", "middling length", "larger"); 
$sortOption = 'random'; 
usort($array, function($a, $b) use ($sortOption) 
{ 
if ($sortOption == 'random') { 
// sorteio aleatório retornando (−1, 0, 1) 
return rand(0, 2) - 1; 
} 
else { 
return strlen($a) - strlen($b); 
} 
}); 
print_r($array);
Curso de PHP – Funções Fábio M. Pereira 
UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA – UESB 
UNIDADE ORGANIZACIONAL DE INFORMÁTICA - UINFOR
Baseado em...

PHP - Funções

  • 1.
    Curso de PHP– Funções Fábio M. Pereira UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA – UESB UNIDADE ORGANIZACIONAL DE INFORMÁTICA - UINFOR
  • 2.
    Roteiro •Introdução •Chamandouma Função •Definindo uma Função •Escopo de Variáveis –Variáveis Globais –Variáveis Estáticas •Parâmetros de Função –Passagem de Parâmetros por Valor –Passagem de Parâmetros por Referência –Parâmetros Default –Parâmetros Variáveis –Parâmetros Faltando –Definição de Tipo •Retornando Valores •Variáveis com Nomes de Funções •Funções Anônimas
  • 3.
  • 4.
    Funções •Uma funçãoé um bloco nomeado de código que realiza uma tarefa específica •Possui a possibilidade de receber um conjunto de valores (parâmetros) e de retornar um único valor •Aumenta a legibilidade do código por isolar o código que realiza tarefas específicas
  • 5.
  • 6.
    Chamando uma Função •Funções em um programa PHP podem ser embutidas ou definidas pelo usuário •Independentemente da origem, todas as funções são avaliadas da mesma maneira: $someValue = function_name( [ parameter, ... ] ); •O número de parâmetros que uma função requer pode variar de uma função para outra (e também na mesma função) •Exemplos: // strlen() é uma função interna que retorna o // tambanho de umastring $length = strlen("PHP"); // $length é agora 3
  • 7.
    Chamando uma Função •Exemplos (cont.): // sin() e asin() são funções matemáticas // seno e arco-seno // $result é o seno do arco-seno de 1: $result = sin(asin(1)); // unlink() apaga um arquivo // retorna falso se falhar $result = unlink("functions.txt"); •Reescrevendo a última função: $result = unlink("functions.txt") or die("Falha na Operação!");
  • 8.
  • 9.
    Definindo uma Função •Para criar uma função, devemos utilizar a seguinte sintaxe: function [&] nome_da_função([parametros[, ...]]) { lista de instruções } •A lista de instruções pode incluir HTML •Podemos declarar uma função PHP que não contenha nenhum código PHP •Exemplo: <?php function column() { ?> <td></td> <?php }
  • 10.
    Definindo uma Função •O nome de uma função pode ser qualquer string que inicie por uma letra ou sublinhado seguido por nenhuma ou mais letras, sublinhados e dígitos •Nomes de funções não são sensíveis à caixa, assim sin(1), SIN(1), SiN(1), etc. se referem à mesma função •Por convenção, funções internas em PHP são chamadas com todas as letras em minúsculo •Tipicamente, funções retornam algum valor •Para retornar o valor de uma função, devemos utilizar a instrução return •Podemos incluir qualquer quantidade de instruções return em uma função
  • 11.
    Exemplos •Concatenação destrings: function strcat($left, $right) { $combinedString = $left . $right; return $combinedString; } •Simplificando: function strcat($left, $right) { return $left . $right; } •Em uma página PHP: <?php function strcat($left, $right) { return $left . $right; } $first = "This is a "; $second = " complete sentence!"; echo strcat($first, $second);
  • 12.
    Aninhamento •Podemos aninhardeclaração de funções, mas com efeito limitado –Não limita a visibilidade da função interna que pode ser chamada de qualquer lugar do programa –Não pega automaticamente os argumentos da função externa –A função interna só poderá ser chamada dentro do programa após a chamada da função externa function outer ($a) { function inner ($b) { echo "there $b"; } echo "$a, hello "; } // saída: "well, hello there reader" outer("well"); inner("reader");
  • 13.
  • 14.
    Escopo de Variáveis •Se não usarmos funções, qualquer variável criada poderá ser usada em qualquer lugar em uma página •Funções mantém seus próprios conjuntos de variáveis que são distintos daquelas da página e de outras funções –As variáveis definidas em uma função, incluindo os seus parâmetros, não são acessíveis fora da função –Por padrão, variáveis definidas fora de uma função não são acessíveis dentro da função $a = 3; function foo() { $a += 2; } foo(); echo $a; // Qual o valor de $a?
  • 15.
    Variáveis Globais •Sequisermos uma variável de escopo global, que possa ser acessada de dentro de uma função, podemos utilizar a palavra-chave global: global var1, var2, ... –Parâmetros de função nunca poderão ser variáveis globais •Modificando o exemplo anterior: $a = 3; function foo() { global $a; $a += 2; } foo(); echo $a; // Qual o valor de $a?
  • 16.
    Variáveis Globais •Usarglobal é equivalente a criar uma referência à variável $GLOBALS •Então, as instruções a seguir têm o mesmo efeito: global $var; $var = $GLOBALS['var'];
  • 17.
    Variáveis Estáticas •Assimcomo C, PHP dá suporte à declaração de variáveis de função estáticas –É inicializada apenas na primeira vez em que a função é chamada –Retém o seu valor em todas as chamadas da função •Utilizamos a palavra-chave static no primeiro uso para declarar uma variável de função estática: static var [= value][, ... ]; •Exemplo: <?php function counter() { static $count = 0; return $count++; } for ($i = 1; $i <= 5; $i++) { print counter(); }
  • 18.
  • 19.
    Parâmetros de Função •Funções podem esperar, por declaração em sua definição, um número qualquer de argumentos •Existem duas maneiras diferentes de passar parâmetros para um função: –A primeira e mais comum, por valor –A outra, por referência •Passagem de parâmetros por valor –O argumento é qualquer expressão válida –A expressão é avaliada e o valor resultante é atribuído à variável apropriada na função –Em todos os exemplos vistos até agora, a passagem de argumentos foi por valor
  • 20.
    Passagem de Parâmetrospor Referência •Passagem por referência permite sobrepor as regras normais de escopo e dar à função acesso direto a uma variável –Para ser passado por referência, o argumento deve ser uma variável •Indicamos um argumento em particular de uma função que será passado por referência precedendo o nome da variável na lista de parâmetros com o sinal (&) <?php function doubler(&$value) { $value = $value * 2; } $a = 3; doubler($a); echo $a;
  • 21.
    Passagem de Parâmetrospor Referência •Apenas variáveis – não constantes – podem ser fornecidas a parâmetros declarados por referência •Assim, no exemplo anterior, a instrução a seguir geraria um erro: <?= doubler(7); ?> •Entretanto, podemos definir um valor padrão para parâmetros passados por referência •Mesmo em casos em que não modifiquemos o valor dados, podemos querer que os mesmos sejam passados por referência –Quando passamos por valor, PHP faz uma cópia do valor armazenado –Particularmente em strings longas e objetos, esta pode ser uma operação cara –Passando por referência removemos a necessidade de cópia do valor
  • 22.
    Parâmetros Default •Paraespecificar um parâmetro default (padrão), atribuímos o valor do parâmetro na declaração da função –O valor atribuído não pode ser uma expressão complexa, apenas um valor escalar •Uma função pode ter qualquer número de parâmetros com valores default •Entretanto, eles devem ser listados após todos os parâmetros que não tenham valores default •Exemplo: function getPreferences($whichPreference = 'all') { // instruções }
  • 23.
    Parâmetros Variáveis •Umafunção pode precisar de um número variável de parâmetros •Para declarar uma função com um número variável de parâmetros, simplesmente retire o bloco de parâmetros inteiro function getPreferences() { // algum código } •PHP fornece três funções para recuperar os parâmetros passados: –func_get_args() retorna um array com todos os parâmetros passados para a função –func_num_args() retorna a quantidade de parâmetros fornecidos –func_get_arg() retorna um parâmetro específico
  • 24.
    Parâmetros Variáveis •Umafunção pode precisar de um número variável de parâmetros •Para declarar uma função com um número variável de parâmetros, simplesmente retire o bloco de parâmetros inteiro function getPreferences() { // algum código } •PHP fornece três funções para recuperar os parâmetros passados: –func_get_args() retorna um array com todos os parâmetros passados para a função –func_num_args() retorna a quantidade de parâmetros fornecidos –func_get_arg() retorna um parâmetro específico $array = func_get_args(); $count = func_num_args(); $value = func_get_arg(argument_number);
  • 25.
    Exemplo <?php functioncountList() { if (func_num_args() == 0) { return false; } else { $count = 0; for ($i = 0; $i < func_num_args(); $i++) { $count += func_get_arg($i); } return $count; } } echo countList(1, 5, 9); // saída: "15"
  • 26.
    Parâmetros Variáveis •Oresultado de qualquer dessas funções não pode ser usado diretamente como um parâmetro para outra função –Podemos atribuir o valor a uma variável e então utilizá-lo •Não funciona: foo(func_num_args()); •Funciona: $count = func_num_args(); foo($count);
  • 27.
    Parâmetros Faltando •Quandochamamos uma função, podemos passar qualquer número de argumentos •Qualquer parâmetro que a função espera que não tiver sido passado permanece sem valor, e uma advertência é gerada para cada um deles
  • 28.
    Parâmetros Faltando •Quandochamamos uma função, podemos passar qualquer número de argumentos •Qualquer parâmetro que a função espera que não tiver sido passado permanece sem valor, e uma advertência é gerada para cada um deles function takesTwo($a, $b) { if (isset($a)) { echo " a is setn"; } if (isset($b)) { echo " b is setn"; } } echo "With two arguments:n"; takesTwo(1, 2); echo "With one argument:n"; takesTwo(1);
  • 29.
    Parâmetros Faltando •Quandochamamos uma função, podemos passar qualquer número de argumentos •Qualquer parâmetro que a função espera que não tiver sido passado permanece sem valor, e uma advertência é gerada para cada um deles function takesTwo($a, $b) { if (isset($a)) { echo " a is setn"; } if (isset($b)) { echo " b is setn"; } } echo "With two arguments:n"; takesTwo(1, 2); echo "With one argument:n"; takesTwo(1); With two arguments: a is set b is set With one argument: Warning: Missing argument 2 for takes_two() in /path/to/script.php on line 6 a is set
  • 30.
    Definição de Tipo •Quando definimos uma função, podemos necessitar que um parâmetro seja uma instância de uma classe em particular, uma instância de uma classe que implementa uma interface em particular, um array ou um callable •Para atribuir definição de tipo em um parâmetro devemos incluir o nome da classe, array ou callable antes do nome da variável na lista de parâmetros da função •Uma definição de tipo não pode ser usada para requerer um tipo escalar em particular (como inteiro ou string)
  • 31.
    Definição de Tipo •Quando definimos uma função, podemos necessitar que um parâmetro seja uma instância de uma classe em particular, uma instância de uma classe que implementa uma interface em particular, um array ou um callable •Para atribuir definição de tipo em um parâmetro devemos incluir o nome da classe, array ou callable antes do nome da variável na lista de parâmetros da função •Uma definição de tipo não pode ser usada para requerer um tipo escalar em particular (como inteiro ou string) class Entertainment {} class Clown extends Entertainment {} class Job {} function handleEntertainment(Entertainment $a, callable $callback = NULL) { echo "Handling " . get_class($a) . " funn"; if ($callback !== NULL) { $callback(); } } $callback = function() { // faça alguma coisa }; handleEntertainment(new Clown); // funciona handleEntertainment(new Job, $callback); // erro
  • 32.
  • 33.
    Retornando Valores •Funçõesem PHP podem retornar apenas um único valor através da palavra-chave return function returnOne() { return 42; } •Para retornar múltiplos valores podemos utilizar um array function returnTwo() { return array("Fred", 35); } •Se nenhum valor é fornecido pela função, ela retornará NULL
  • 34.
    Retornando Valores porReferência •Por definição, valores são copiados fora da função •Para retornar um valor por referência, devemos declarar a função com um & antes do nome e atribuir o valor retornado a uma variável $names = array("Fred", "Barney", "Wilma", "Betty"); function &findOne($n) { global $names; return $names[$n]; } $person =& findOne(1); // Barney $person = "Barnetta"; // modifica $names[1]
  • 35.
    Retornando Valores porReferência •Esta técnica é algumas vezes utilizada para retornar grandes strings ou arrays de forma eficiente •Entretanto, como PHP implementa copy-on-write para valores de variáveis, retornar um valor de uma função por referência é tipicamente desnecessário •Retornar uma referência a um valor é mais lento que retornar o valor em si
  • 36.
    FUNÇÕES Variáveis comNomes de Funções
  • 37.
    Variáveis com Nomesde Funções •Da mesma maneira que uma variável pode conter o nome de outra variável, acessado através do construtor $$, podemos adicionar parênteses após uma variável para chamar a função cujo nome é o valor armazenado por ela, por exemplo, $variável() •Para saber quando o valor uma variável representa uma função, podemos utilizar a função function_exists(), que pode ser utilizada para prevenir erros
  • 38.
    Variáveis com Nomesde Funções •Da mesma maneira que uma variável pode conter o nome de outra variável, acessado através do construtor $$, podemos adicionar parênteses após uma variável para chamar a função cujo nome é o valor armazenado por ela, por exemplo, $variável() •Para saber quando o valor uma variável representa uma função, podemos utilizar a função function_exists(), que pode ser utilizada para prevenir erros switch ($which) { case 'first': first(); break; case 'second': second(); break; case 'third': third(); break; }
  • 39.
    Variáveis com Nomesde Funções •Da mesma maneira que uma variável pode conter o nome de outra variável, acessado através do construtor $$, podemos adicionar parênteses após uma variável para chamar a função cujo nome é o valor armazenado por ela, por exemplo, $variável() •Para saber quando o valor uma variável representa uma função, podemos utilizar a função function_exists(), que pode ser utilizada para prevenir erros switch ($which) { case 'first': first(); break; case 'second': second(); break; case 'third': third(); break; } if (function_exists($which)) { $which(); // se $which é "first", // a função first() será chamada, ... }
  • 40.
    Variáveis com Nomesde Funções •Construtores da linguagem, como echo() e isset(), não podem ser chamados através de variáveis com nomes de funções: $which = "echo"; $which("hello, world"); // não funciona
  • 41.
  • 42.
    Funções Anônimas •Algumasfunções PHP utilizam uma função fornecida a elas para realizar parte do seu trabalho •Por exemplo, a função usort() utiliza uma função passada a ela como parâmetro para determinar a forma de ordenação dos itens em um array •Podemos criar uma função anônima usando a sintaxe normal de definição de uma função, mas a atribuindo a uma variável ou a passando diretamente
  • 43.
    Funções Anônimas •Algumasfunções PHP utilizam uma função fornecida a elas para realizar parte do seu trabalho •Por exemplo, a função usort() utiliza uma função passada a ela como parâmetro para determinar a forma de ordenação dos itens em um array •Podemos criar uma função anônima usando a sintaxe normal de definição de uma função, mas a atribuindo a uma variável ou a passando diretamente $array = array("really long string here, boy", "this", "middling length", "larger"); // usort usa a função anônima para colocar o array // em ordem de tamanho da string usort($array, function($a, $b) { return strlen($a) - strlen($b); }); print_r($array);
  • 44.
    Funções Anônimas •Funçõesanônimas podem usar as variáveis definidas em seu escopo através da sintaxe use •Por exemplo: $array = array("really long string here, boy", "this", "middling length", "larger"); $sortOption = 'random'; usort($array, function($a, $b) use ($sortOption) { if ($sortOption == 'random') { // sorteio aleatório retornando (−1, 0, 1) return rand(0, 2) - 1; } else { return strlen($a) - strlen($b); } }); print_r($array);
  • 45.
    Curso de PHP– Funções Fábio M. Pereira UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA – UESB UNIDADE ORGANIZACIONAL DE INFORMÁTICA - UINFOR
  • 46.