PHP - Funções

FabioMouraPereira 1,323 views 46 slides Aug 28, 2014
Slide 1
Slide 1 of 46
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46

About This Presentation

Curso da Linguagem de Programação PHP da disciplina Desenvolvimento de Sistemas Web da Universidade Estadual do Sudoeste da Bahia - UESB.


Slide Content

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 set\n";
}
if (isset($b)) {
echo " b is set\n";
}
}

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 set\n";
}
if (isset($b)) {
echo " b is set\n";
}
}

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) . " fun\n";
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...