Tutorial PHP: Função PHP com retorno e Argumentos

Tutorial PHP: Função PHP com retorno e Argumentos

Seguindo nossa série de posts com o tutorial PHP, veremos neste post o uso de funções, uma função é um recurso muito importante que encontramos nas linguagens de programação, ela evita o retrabalho, e o copia e cola em nosso código tornando-o mais claro e facilitando sua manutenção, vale ressaltar que o conceito de função é válido no cenário de uma programação procedural, ou seja, quando o desenvolvimento não é orientado a objetos.

Existem casos onde é necessário realizarmos a mesma tarefa, mesma rotina, em diferentes pontos de nosso código fonte, e, para não precisarmos repetir código as criamos funções, isso nos permite chamarmos aquele bloco de código sempre que for necessário.

Como dito anteriormente, funções geralmente são utilizadas em códigos procedurais, ou seja, códigos NÃO orientados a objeto, apesar de elas também aparecerem na orientação a objetos, mas com um conceito um pouco diferente (e veremos mais detalhadamente isso mais adiante nos nossos posts), porém elas são imprescindíveis para termos um código de qualidade quando estamos fazendo um código procedural.

 

Antes de começarmos a ver as funções vamos as sugestões de respostas para os exercícios (desafios) propostos no último post:

Fibonacci: https://gist.github.com/RodriAndreotti/fe174c1150c7fa2fa1229f32717f9e7b

Fatorial: https://gist.github.com/RodriAndreotti/8cd042fc1a4774c7a35504e7c1b11b20

 

Função

Como descrito anteriormente uma função é um bloco de código que é definido com um nome (assim como as funções nativas da linguagem PHP), estas funções devem conter um nome e não podem ter o mesmo nome de outra função já existente no mesmo código ou de uma função nativa do PHP.

Seu principal objetivo é a reutilização de código, ou seja, evitar a necessidade de repetir a mesma rotina em diversos lugares do nosso programa, isso facilita não só a leitura do código, como também a manutenção do mesmo, visto que se precisarmos alterar qualquer coisa na rotina executada pela função, alteraremos somente dentro da função e não em diversos lugares diferentes.

Para exemplificar, suponhamos que precisamos criar uma rotina que calcula o INSS que deve ser descontado de um funcionário quando o salário for informado, para isso podemos fazer algo semelhante ao abaixo:

<?php
function calcularINSS($salario)
{
    if($salario <= 1556.94) {
        $desconto = 0.08;
    }
    elseif($salario <= 2594.92){
        $desconto = 0.09;
    }
    elseif($salario <= 5189.82) {
        $desconto = 0.11;
    }

    if($salario > 5189.82){
        $valorDesconto = 5189.82 * 0.11;
    else {
        $valorDesconto = $salario * $desconto;
    }
}


$salario = 3000.00;
calculaINSS($salario);

 

Para nosso cálculo, utilizamos a regra de negócios fornecida pela previdência social, podemos encontrá-la neste link.

A partir deste momento, toda vez que precisarmos calcular o INSS de um salário, podemos chamar nossa função, desde que ela tenha sido declarada antes de onde chamamos ela.

É uma prática comum a declaração das funções no início do script, ou criar um arquivo separado contendo as funções comuns ao sistema e fazer a inclusão dela no início do script.

 

Parâmetros / Argumentos

No exemplo acima a função recebe um parâmetro, que nada mais é do que uma espécie de variável que será acessível dentro do escopo (corpo) daquela função e que pode ser passada para ela por um código alheio a ela.

 

É possível também definir funções sem parâmetros, estas fariam processamentos que não dependessem de informações vindas de outros trechos de códigos ou outras funções.

 

Os valores passados para as funções via parâmetro podem ser de tipos primários do PHP (inteiros, booleanos etc. para saber mais consulte o post sobre o assunto aqui), ou tipos complexos (objetos).  É possível definir parâmetros opcionais para funções, possibilitando assim o uso da função de forma mais flexível.

É possível também falarmos ao PHP que a função só pode receber o parâmetro se ele for de um determinado tipo, para garantirmos o funcionamento correto do código. No PHP 5 só é possível definirmos estes tipos para  array, classe (só é permitido o recebimento do parâmetro se ele for uma instância da classe informada) ou callables (que são outras funções) como tipos de parâmetros para as funções.

No PHP 7 foram inseridos os tipos primários também, sendo assim passamos a poder também definir os tipos int, float, string e bool para os parâmetros da função.

Veja alguns exemplos de funções:

/**
 * Função sem parâmetros
 */
function listaFuncionarios() 
{
    // Código que faz a listagem de funcionários
}

/**
 * Função com um parâmetro
 */
function calculaIRRF($salario) 
{
     // Código que calcula o IRRF
}

/**
 * Função com parâmetros opcionais
 * Neste caso se não for informado o segundo parâmetro na chamada da função
 * o PHP assumirá que o valor é false
 */
function calculaHoraExtra($salario, $diaDescanso = false)
{
    if($diaDescanso) {
         // Código que calcula as horas extras em dia de descanso
    }
    else{
        // Código que calcula as horas extras em dias normais
    }
}

/**
 * Função com definição do tipo de argumento
 * Inserido no PHP 7
 */
function calculaVR(float $porcentagem)
{
    // Código que calcula o VR
}

 

Função com retorno

Também é possível definir para que a função retorne algum valor para o script que a chamou, na verdade toda a função, em PHP, tem um retorno implícito, quando não o definimos, a função retornará NULL.

 

No exemplo do cálculo do INSS acima, imaginemos que o valor calculado do INSS deve ser devolvido para o script que o chamou para que seja calculado o salário líquido do funcionário. Neste caso seria necessário alterarmos a função para o seguinte:

<?php
function calcularINSS($salario)
{
    if($salario <= 1556.94) {
        $desconto = 0.08;
    }
    elseif($salario <= 2594.92){
        $desconto = 0.09;
    }
    elseif($salario <= 5189.82) {
        $desconto = 0.11;
    }

    if($salario > 5189.82){
        $valorDesconto = 5189.82 * 0.11;
    else {
        $valorDesconto = $salario * $desconto;
    } 
    return $valorDesconto;
}


$salario = 3000.00;
$desconto = calculaINSS($salario);
$salarioLiquido = $salario - $desconto;

 

A partir do PHP 7 também é possível, assim como fizemos com os parâmetros (ou argumentos), informar qual o tipo de retorno que a função terá, os tipos de retorno para a função são os mesmos que para a definição dos parâmetros, é possível ver todos aqui.

Para definirmos o tipo do retorno da função a sintaxe é a abaixo:

/**
 * Esta função recebe um float como argumento e
 * devolve um float (Válido somente no PHP 7)
 */
function calculaVA(float $porcentagem) : float 
{
   // Código que calcula o desconto do Vale Alimentação
   return $valorCalculado;
}

 

O domínio do conceito de função é importante para a futura compreensão de alguns conceitos da programação orientada a objeto.

 

Como exercício proposto para esse post, recomendamos o desenvolvimento de uma função para realizar o cálculo do Importo de Renda Retido na Fonte, para o salário de um funcionário, esta função deve receber como argumento (parâmetro) o salário do funcionário e deve retornar o valor calculado. A regra de negócios para esta função pode ser encontrada no neste link da Receita Federal do Brasil.

 

Como de costume, a solução para o exercício proposto virá no próximo POST da série.

 

Se gostou do post, não deixe de compartilhar, pode ajudar mais alguém que esteja começando a programar.

Sobre Rodrigo Teixeira Andreotti

Técnico em Informática formado pela ETEC Lauro Gomes Analista de Sistemas Pela universidade Metodista. Impacta Certified Specialist - Linux Programador PHP desde 2007, atuando em diversos projetos de sistemas internos, migrações, desenvolvimento de API's e sites públicos tanto como freelancer quanto com contrato com empresas. Também atuante como administrador Linux, administrando dois servidores próprios com CentOS, além de prestar serviços de administração e manutenção em servidores para algumas empresas.



Tutorial PHP: Função PHP com retorno e Argumentos

Tutorial PHP: Função PHP com retorno e Argumentos

Seguindo nossa série de posts com o tutorial PHP, veremos neste post o uso de funções, uma função é um recurso muito importante que encontramos nas linguagens de programação, ela evita o retrabalho, e o copia e cola em nosso código tornando-o mais claro e facilitando sua manutenção, vale ressaltar que o conceito de função é válido no cenário de uma programação procedural, ou seja, quando o desenvolvimento não é orientado a objetos.

Existem casos onde é necessário realizarmos a mesma tarefa, mesma rotina, em diferentes pontos de nosso código fonte, e, para não precisarmos repetir código as criamos funções, isso nos permite chamarmos aquele bloco de código sempre que for necessário.

Como dito anteriormente, funções geralmente são utilizadas em códigos procedurais, ou seja, códigos NÃO orientados a objeto, apesar de elas também aparecerem na orientação a objetos, mas com um conceito um pouco diferente (e veremos mais detalhadamente isso mais adiante nos nossos posts), porém elas são imprescindíveis para termos um código de qualidade quando estamos fazendo um código procedural.

 

Antes de começarmos a ver as funções vamos as sugestões de respostas para os exercícios (desafios) propostos no último post:

Fibonacci: https://gist.github.com/RodriAndreotti/fe174c1150c7fa2fa1229f32717f9e7b

Fatorial: https://gist.github.com/RodriAndreotti/8cd042fc1a4774c7a35504e7c1b11b20

 

Função

Como descrito anteriormente uma função é um bloco de código que é definido com um nome (assim como as funções nativas da linguagem PHP), estas funções devem conter um nome e não podem ter o mesmo nome de outra função já existente no mesmo código ou de uma função nativa do PHP.

Seu principal objetivo é a reutilização de código, ou seja, evitar a necessidade de repetir a mesma rotina em diversos lugares do nosso programa, isso facilita não só a leitura do código, como também a manutenção do mesmo, visto que se precisarmos alterar qualquer coisa na rotina executada pela função, alteraremos somente dentro da função e não em diversos lugares diferentes.

Para exemplificar, suponhamos que precisamos criar uma rotina que calcula o INSS que deve ser descontado de um funcionário quando o salário for informado, para isso podemos fazer algo semelhante ao abaixo:

<?php
function calcularINSS($salario)
{
    if($salario <= 1556.94) {
        $desconto = 0.08;
    }
    elseif($salario <= 2594.92){
        $desconto = 0.09;
    }
    elseif($salario <= 5189.82) {
        $desconto = 0.11;
    }

    if($salario > 5189.82){
        $valorDesconto = 5189.82 * 0.11;
    else {
        $valorDesconto = $salario * $desconto;
    }
}


$salario = 3000.00;
calculaINSS($salario);

 

Para nosso cálculo, utilizamos a regra de negócios fornecida pela previdência social, podemos encontrá-la neste link.

A partir deste momento, toda vez que precisarmos calcular o INSS de um salário, podemos chamar nossa função, desde que ela tenha sido declarada antes de onde chamamos ela.

É uma prática comum a declaração das funções no início do script, ou criar um arquivo separado contendo as funções comuns ao sistema e fazer a inclusão dela no início do script.

 

Parâmetros / Argumentos

No exemplo acima a função recebe um parâmetro, que nada mais é do que uma espécie de variável que será acessível dentro do escopo (corpo) daquela função e que pode ser passada para ela por um código alheio a ela.

 

É possível também definir funções sem parâmetros, estas fariam processamentos que não dependessem de informações vindas de outros trechos de códigos ou outras funções.

 

Os valores passados para as funções via parâmetro podem ser de tipos primários do PHP (inteiros, booleanos etc. para saber mais consulte o post sobre o assunto aqui), ou tipos complexos (objetos).  É possível definir parâmetros opcionais para funções, possibilitando assim o uso da função de forma mais flexível.

É possível também falarmos ao PHP que a função só pode receber o parâmetro se ele for de um determinado tipo, para garantirmos o funcionamento correto do código. No PHP 5 só é possível definirmos estes tipos para  array, classe (só é permitido o recebimento do parâmetro se ele for uma instância da classe informada) ou callables (que são outras funções) como tipos de parâmetros para as funções.

No PHP 7 foram inseridos os tipos primários também, sendo assim passamos a poder também definir os tipos int, float, string e bool para os parâmetros da função.

Veja alguns exemplos de funções:

/**
 * Função sem parâmetros
 */
function listaFuncionarios() 
{
    // Código que faz a listagem de funcionários
}

/**
 * Função com um parâmetro
 */
function calculaIRRF($salario) 
{
     // Código que calcula o IRRF
}

/**
 * Função com parâmetros opcionais
 * Neste caso se não for informado o segundo parâmetro na chamada da função
 * o PHP assumirá que o valor é false
 */
function calculaHoraExtra($salario, $diaDescanso = false)
{
    if($diaDescanso) {
         // Código que calcula as horas extras em dia de descanso
    }
    else{
        // Código que calcula as horas extras em dias normais
    }
}

/**
 * Função com definição do tipo de argumento
 * Inserido no PHP 7
 */
function calculaVR(float $porcentagem)
{
    // Código que calcula o VR
}

 

Função com retorno

Também é possível definir para que a função retorne algum valor para o script que a chamou, na verdade toda a função, em PHP, tem um retorno implícito, quando não o definimos, a função retornará NULL.

 

No exemplo do cálculo do INSS acima, imaginemos que o valor calculado do INSS deve ser devolvido para o script que o chamou para que seja calculado o salário líquido do funcionário. Neste caso seria necessário alterarmos a função para o seguinte:

<?php
function calcularINSS($salario)
{
    if($salario <= 1556.94) {
        $desconto = 0.08;
    }
    elseif($salario <= 2594.92){
        $desconto = 0.09;
    }
    elseif($salario <= 5189.82) {
        $desconto = 0.11;
    }

    if($salario > 5189.82){
        $valorDesconto = 5189.82 * 0.11;
    else {
        $valorDesconto = $salario * $desconto;
    } 
    return $valorDesconto;
}


$salario = 3000.00;
$desconto = calculaINSS($salario);
$salarioLiquido = $salario - $desconto;

 

A partir do PHP 7 também é possível, assim como fizemos com os parâmetros (ou argumentos), informar qual o tipo de retorno que a função terá, os tipos de retorno para a função são os mesmos que para a definição dos parâmetros, é possível ver todos aqui.

Para definirmos o tipo do retorno da função a sintaxe é a abaixo:

/**
 * Esta função recebe um float como argumento e
 * devolve um float (Válido somente no PHP 7)
 */
function calculaVA(float $porcentagem) : float 
{
   // Código que calcula o desconto do Vale Alimentação
   return $valorCalculado;
}

 

O domínio do conceito de função é importante para a futura compreensão de alguns conceitos da programação orientada a objeto.

 

Como exercício proposto para esse post, recomendamos o desenvolvimento de uma função para realizar o cálculo do Importo de Renda Retido na Fonte, para o salário de um funcionário, esta função deve receber como argumento (parâmetro) o salário do funcionário e deve retornar o valor calculado. A regra de negócios para esta função pode ser encontrada no neste link da Receita Federal do Brasil.

 

Como de costume, a solução para o exercício proposto virá no próximo POST da série.

 

Se gostou do post, não deixe de compartilhar, pode ajudar mais alguém que esteja começando a programar.

Sobre Rodrigo Teixeira Andreotti

Técnico em Informática formado pela ETEC Lauro Gomes Analista de Sistemas Pela universidade Metodista. Impacta Certified Specialist - Linux Programador PHP desde 2007, atuando em diversos projetos de sistemas internos, migrações, desenvolvimento de API's e sites públicos tanto como freelancer quanto com contrato com empresas. Também atuante como administrador Linux, administrando dois servidores próprios com CentOS, além de prestar serviços de administração e manutenção em servidores para algumas empresas.