NOME DURAÇÃO
Curso PHP
Abertura do Curso de PHP
Visão Geral do PHP
Ambiente de Desenvolvimento PHP
Servidor Web PHP
Como instalar o WAMP no Windows - Curso de PHP
Instalando PHPStorm no Windows
URL e Apache com PHP
Hello World em PHP
Executando Scripts PHP
TAG PHP
Montagem do HTML com PHP
Montagem do HTML com PHP II
Comentários em PHP
Definições da Linguagem PHP
Variáveis em PHP
Variáveis em PHP II
Nomenclatura de Variáveis em PHP
Operadores Aritméticos em PHP
Tipos de Dados do PHP
Módulo da Divisão em PHP
Tomada de Decisão em PHP
Tomada de Decisão - Estrutura else
Ambiente para Estudo PHP
Números Pares e Ímpares em PHP
A instrução elseif
Operadores Relacionais em PHP
Operadores Relacionais Parte II
Operadores Lógicos em PHP
Tela de Login e Senha com PHP
Introdução às Estruturas de Repetição em PHP
Instrução While em PHP
Introdução do-while em PHP
do-while - caso de uso com PHP
Script em Looping em PHP
Atribuição vs Comparação vs Identico em PHP
Operadores de Atribuição Compostos em PHP
Operadores de Incremento e Decremento em PHP
Estrutura de Repetição for do PHP
Estrutura de Repetição for do PHP (parte II)
Tabuada em PHP
Instrução break em PHP
Instrução continue em PHP
Operação Ternária em PHP
Operação Ternária em PHP (parte II)
Estrutura de Seleção Múltipla switch em PHP
Estrutura de Seleção Múltipla switch em PHP (parte II)
Precedência e Associatividade de Operadores em PHP
Constantes em PHP
Variáveis Variáveis em PHP
Introdução aos Arrays em PHP
Arrays Indexados em PHP
Definindo, Incluindo, Alterando e Excluindo elementos em PHP
Função range() em PHP
Iterando Arrays em PHP
Estrutura foreach em PHP
O foreach em PHP - Como usar?
Estrutura foreach - alterando valores internos
Arrays Associativos em PHP
Arrays Multidimensionais em PHP
Manipulação de Arrays em PHP
Introdução às Funções em PHP
Definindo parâmetros em PHP
Parâmetros default com PHP
Lista de Parâmetros em PHP
Lista de Parâmetros em PHP II
Funções variádicas em PHP
Retorno de Valores pela função em PHP
Funções e Escopo de Variáveis em PHP
Parâmetros por Referência em PHP
Parâmetros por Referência em PHP II
Parâmetros Tipados em PHP
Valores de retornos de funções tipados em PHP
Null Coalescing Operator em PHP
Operador SpaceShift em PHP
Importação: include() e require() do PHP
Introdução às Funções Anônimas em PHP
Escopo de nomes das funções anônimas em PHP
Funções Anônimas na Prática com PHP
Funções Anônimas e Arrays com PHP
Introdução às Strings em PHP
Aspas Duplas vs Aspas Simples em PHP
String Aspas Duplas em PHP
String heredoc e nowdoc em PHP
Funções para Manipulação de Strings em PHP
Introdução às Requisições Web em PHP
Método GET em PHP
Formulários HTML e PHP
Método POST com PHP
Variáveis superglobais do PHP
A Orientação a Objetos em PHP
Primeira Classe em PHP
Membros de Classe em PHP
Criação de Objetos em PHP
Acessando Membros de Classe em PHP
Implementando Comportamentos de Classe com PHP
Pseudo-variável $this em PHP
Gerenciando Atributos de Classe em PHP
Construtores em PHP
Construtores Personalizados em PHP
Destrutores em PHP
Encapsulamento em PHP
Encapsulamento em PHP (parte II)
Herança em PHP
Herança com PHP II
Modificadores de Acesso em PHP
Visibilidade das Funções em PHP
Funções Modificadoras em PHP
Sobrescrita de Funções em PHP

Nessa aula implementaremos um código utilizando os conceitos de funções anonimas estudadas nas aulas anteriores.

FUNÇÕES PARA MANIPULAÇÃO DE ARRAYS QUE RECEBEM FUNÇÕES ANÔNIMA

O PHP tem definido algumas funções para manipularmos Arrays que tem definido o envio de uma função anônima como parâmetro. Essa funções, implementão algumas características e funcionalidades encontradas em linguagens funcionais.

Nesse momento, vamos estudar as funções array_map() e array_filter().

IMPLEMENTANDO A OPERAÇÃO EXTERNAMENTE

Um dos grandes benefícios das funções anônimas, é a capacidade que nós temos de implementar externamente ações que irão interferir no processamento interno sem fazer qualquer alteração nessa função.

Vamos supor uma situação onde existe uma lista de valores e é necessário realizar algum processamento sobre os itens. Pra isso, nós utilizarmos um laço de repetição e a cada item realizarmos uma determinada operação. Essa é uma forma estática de percorrer os elemtnos e realizar um determinado tratamento sobre os mesmos.

Agora, nós podemos trabalhar de tal maneira onde não será implementado dentro da função o tratamento que sera dado a cada elemento da lista, o que será feito, é a passagem do elemento através de uma função anônima que será recebida como parâmetro. Dessa forma, nós temos que o processamento irá ocorrer externamente e quem irá implementar o mesmo, não precisa conhecer o funcionamento interno da função e nem ter acesso ao seu código.

Um detalhe das funções anônimas é que a expicação é complexa, enquanto a implementação geralmente é simples.

$quadrado = function($num){
    return $num * $num;
};
$cubo = function($num) use ($quadrado){
    return $quadrado($num) * $num;
};
$soma = function($num){
    return $num + $num;
};

function processa_lista($lista, $func){
    foreach($lista as &$item)
        $item = $func($item);
    return $lista;
}

print_r(processa_lista(range(1, 10), $soma));

FUNÇÕES PHP E FUNÇÕES ANÔNIMAS

O PHP possui algumas funções em que é necessário passar como parâmetro uma função anônima. Por exemplo, existe algumas funções para manipulação de Arrays em que o PHP faz o trabalho pesado e assim, basta implementar uma função anônima e passarmos a mesma como parâmetro para obter algum resultado.

FUNÇÃO array_map()

A função array_map() tem por objetivo executar uma determinada função em todos elementos contidos em nosso Array. Então, a função anônima que nós passarmos como parâmetro será aplicada para cada elemento da nossa estrutura.

DEFINIÇÃO

array array_map(callback $callback, array $arr1)
$arr = [1, 2, 3, 4, 5];

$f = function($x) {
    return $x * $x;
}
$var_arr = array_map(f, $arr);
var_dump($var_arr);

FUNÇÃO array_filter()

A função array_filter() proporciona uma maneira fácil para filtrarmos elementos de um Array se baseando na condição implementada na função anônima que é passada como parâmetro. A função anônima, deverá retornar um valor booleano, se o valor for true, o elemento fará parte do novo Array, do contrário, nós temos que o elemento não será adicionado.

DEFINIÇÃO

array array_map(array $arr1, callback $callback)
//$lista = [1,2,3,4,5,6,7,8,9,10];
$lista = [1,2.21,"",9,4];

$f = function ($v) {
    return is_int($v);
};

$lista_filtrada = array_filter( $lista, $f );

print_r( $lista_filtrada );

Note que estamos definindo a função com sendo um parâmetro de outra e também, é interessante observar que a implementação da função, ocorre no local onde deve ser passado o parâmetro para outra função.

EXEMPLO FEITO EM AULA

#PRÁTICA - FUNÇÕES ANÔNIMAS

$quadrado = function($item){
    return $item * $item;
};
$cubo = function($item)use($quadrado){
    return $quadrado($item) * $item;
};
$soma = function($item){
    return $item + $item;
};

function processa_lista($lista, $func){
    foreach($lista as &$item){
        $item = $func($item);
    }
    return $lista;
}

echo "QUADRADO\n";
print_r(processa_lista(range(1,10), $quadrado));

echo "\nCUBO\n";
print_r(processa_lista(range(1,10), $cubo));

echo "\nSOMA\n";
print_r(processa_lista(range(1,10), $soma));


//print_r(processa_lista(
//    range(1,10),
//    function($item){
//        return $item - 10;
//    }
//));


Tags curso, php, função, função anonima, lambda, closures, função lambda, função de primeira ordem, função de ordem superior

Comentários

comments powered by Disqus