Curso de PHP: Funções - PARTE IV - Variável estática e o retorno de uma função

Uma função pode retornar algum valor EXPLÍCITO, o que é o que acontece na maioria das vezes. Nós indicamos para a função o que retornar, podendo ser uma variável, ou algum dado qualquer. Se não indicarmos o que ela deve retornar, automaticamente será retornado valor null.

E assim como os parâmetros, há formas diferentes de retornar um valor de uma função.

Explicarei também sobre as variáveis estáticas, que são variáveis que retém o valor, mesmo após o final da execução de uma função.

Normalmente, a variável que é criada dentro de uma função é considerada volátil, pois, cada vez que a função é chamada, todas as variáveis são inicializadas novamente. Exemplo:

<?php
    function teste() {
        $contador = 0;
        $contador++;
        echo $contador . '<br />';
    }

    teste();
    teste();

No código acima, será exibido o número 1 duas vezes. Porquê? Na função teste, iniciamos a variável $contador com o número 0. Depois incrementamos essa variável e exibimos o resultado. Na primeira execução o resultado é 1. Quando chamamos novamente, todo o processo é feito novamente e obtemos o mesmo resultado.

Com as variáveis estáticas iremos observar um comportamento diferente, onde a variável será criada na primeira vez que chamarmos uma função, e seu valor será mantido nas próximas chamadas. Ou seja, ela não será iniciada várias vezes. Exemplo:

<?php
    function teste() {
        static $contador = 0;
        $contador++;
        echo $contador . '<br />';
    }

    teste();
    teste();
 

A única coisa que mudou no código acima foi que adicionamos a palavra static antes de inicializar a variável. Se você executar o código, será impresso 1 e 2.

Para entender: A primeira vez que chamamos a função, o php cria uma variável estática chamada $contador. O valor da variável é incrementado e depois impresso. Na segunda vez que chamamos a função, o PHP entende que a variável $contador é uma variável estática, e ao invés de iniciar $contador novamente com zero, o PHP restaura o valor da chamada anterior, ou seja, 1, depois incrementa a variável e imprime novamente. Quantas vezes for chamada a função teste, o valor de $contador sempre será restaurado.

 

Retorno da Função

Para retornar um valor de uma função, utilizamos a instrução return. Quando o return é encontrado, o PHP pára de executar o restante da função, e retorna o que estiver á frente da palavra return, para o lugar onde ela foi chamada. Exemplo:

<?php
    function conceito($nota) {
        if ($nota == 10) {
            $conc = 'Excelente';
        } elseif ($nota >=6) {
            $conc = 'Bom';
        } else {
            $conc = 'Ruim';
        }
       
        return $conc;

        echo 'Essa linha nunca será impressa';
    }
   
    echo conceito(7);

O código acima irá escrever 'Bom', mas não irá escrever 'Essa linha nunca será impressa' porquê a instrução echo está após a instrução return.

Você pode ter vários return em uma mesma função, mas apenas um deles vai funcionar, e nesse momento a sua função para de ser executada. Para ter sentido em ter vários return em sua função, eles precisam ser condicionais, ou seja, depender de uma condição, e para isso utilizamos as estruturas condicionais. Exemplo:

<?php
    function conceito($nota) {
        if ($nota == 10) {
            return 'Excelente';
        } elseif ($nota >=6) {
            return 'Bom';
        } else {
            return 'Ruim';
        }
       
        echo 'Essa linha nunca será impressa';
    }
   
    echo conceito(7);

O resultado da função será o mesmo. A diferença é que estamos usando o return dentro do if, e assim que o return ser executado o que estiver a seguir dentro da função não será executado.

 

Retornando uma referência

Assim como podemos passar a referência de uma variável como parâmetro, podemos retornar uma referência como retorno de uma função. Para isso, utilizamos o operador & na declaração da função. Exemplo:

<?php
   
    function & teste() {
        $teste = "Variavel";
        echo '<pre>' . var_dump($teste) . '</pre>';
        return $teste;
    }
   
    $outra = teste();
   
    var_dump($outra);
   

O uso do retorno de variável por referência é muito mais comum quando o retorno é um objeto, o qual não precisa do operador & no PHP 5, pois, os objetos são sempre passados por referência.

Este foi o capítulo final sobre funções. Faça uso racional delas. É preciso saber bem seu conceito para fazer uso correto dos demais recursos que o PHP proporciona.