Tudo que você precisa saber sobre escopo de variável no PHP

Quando você está começando a trabalhar com funções e objetos em PHP, o escopo de variável pode ser a causa de alguma confusão. Felizmente, as regras para o escopo no PHP são fáceis de compreender (em comparação com outras linguagens).

Neste artigo você aprenderá tudo o que você precisa saber sobre escopo de variável em PHP. Veremos:

  • O conceito de escopo de variáveis, o que é e o que significa.
  • As diferenças entre escopo local e global.
  • Como acessar variáveis globais dentro de uma função.
  • Variáveis superglobais do PHP, e como elas funcionam.
  • Como usar variáveis estáticas.

Vamos começar!

O que é escopo de variável?

O escopo de variável é o contexto no qual a variável foi criada, e no qual ela pode ser acessada. Essencialmente, o PHP tem dois escopos:

  • Global: A variável fica acessível em qualquer parte do script
  • Local: A variável é acessível só dentro da função (ou método) que ele foi criado.

O escopo de variáveis – especialmente o escopo local – ajuda a tornar o código mais fácil de gerenciar. Se todas as suas variáveis são globais, elas podem ser lidas e alteradas em qualquer lugar do seu código. Isso pode causar um grande caos no seu script, com muitas partes tentando acessar e trabalhar com a mesma variável. Ao restringir uma variável ao escopo local, você limita a quantidade de código que pode acessar essa variável, tornando o código mais robusto, mais modular e mais fácil de depurar.

Aqui temos um exemplo de uma variável local e uma global:


<?php
     $globalName = "Zoe";

     function Hello() {
         $localName = "Harry";
         echo "Olá, $localName!<br>";
     }

     Hello();
     echo "O valor da $globalName é: '$globalName'<br>";
     echo "O valor da $localName é: '$localName'<br>";
?>

Este script irá gerar o resultado:

Primeiro exemplo do escopo da variável

Neste script, criamos duas variáveis:

  • $globalName: é uma variável global, uma vez que não foi criada dentro de nenhuma função.
  • $localName: é uma variável local, ela foi criada e usada dentro da função Hello().

Depois de criar a variável global e a função, o script chama o método Hello(), que exibe “Olá, Harry!”. O script tenta exibir os valores das variáveis usando echo. Veja o que acontece:

  • Como $globalName foi criada fora da função, ela é acessível em qualquer parte do código, assim o seu valor “Zoe”, é mostrado.
  • Já $localName, por outro lado, só é acessível de dentro da função Hello(). Desta forma o echo, que está fora da função não terá acesso a esta variável local. Em vez disso, o PHP gera um erro, depois exibe o echo.

Acessando variáveis globais dentro das funções

Como mencionei acima, você pode ler e alterar o valor de uma variável global em qualquer lugar em seuscript.

Para acessar uma variável global fora de uma função, basta escrever o nome da variável. Para acessar uma variável global dentro de uma função, no entanto, primeiro você precisa declarar a variável como global dentro da função usando a palavra-chave global:


     function myFunction() {
        global $globalName;
        //Acesso a variável $globalName
     }

Se você não fizer isto, o PHP assume que você está tentando criar ou usar uma variável local.

Aqui está um exemplo de script com uma função que acessa uma variável global:


<?php
     $globalName = "Zoe";

     function Hello() {
          $localName = "Harry";
          echo "Olá, $localName!<br>";

          global $globalName;
          echo "Olá, $globalName!<br>";
     }

     Hello();
?>

O resultado será:

Segundo exemplo do escopo de variável

A função Hello() usa a palavra-chave global para declarar a variável $globalName como global. Assim ela pode acessar a variável e exibir o seu conteúdo (“Zoe”).

Explicando SuperGlobais

O PHP fornece um conjunto especial de arrays globais contendo várias informações úteis. Esses arrays são conhecidos como superglobais, porque eles são acessíveis em qualquer lugar no seu código – inclusive dentro de funções – e você nem precisa declará-los como global usando a palavra-chave global.

Arqui está a lista completa de superglobais disponíveis no PHP, a partir da versão 5.3:

  • $GLOBALS: Contém uma lista de todas as variáveis globais disponíveis no script
  • $_GET: Contém uma lista de todos os campos do formulário enviado pelo navegador usando o pedido GET.
  • $_POST: Contém uma lista de todos os campos do formulário enviado pelo navegador usando o pedido POST.
  • $_COOKIE: Contém uma lista de todos os cookies enviados pelo navegador.
  • $_REQUEST: Contém todas as chaves e valores das variáveis $_GET$_GET e $_COOKIEcombinados.
  • $_FILES: Contém uma lista dos arquivos enviados pelo navegador.
  • $_SESSION: Permite armazenar e recuperar variáveis na sessão atual do navegador.
  • $_SERVER: Contém informações do servidor, como nome do arquivo em execução, bem como o endereço IP do navegador.
  • $_ENV: Contém uma lista de variáveis de ambiente passadas pelo navegador. Podem ser variáveis fornecidas pelo Shell, assim como as variáveis CGI.

Por exemplo, podemos usar a superglobal $_GET, para recuperar um valor incluído na query string da URL, e mostrar o valor na página:


<?php

     $seuNome = $_GET['seuNome'];
     echo "Ola, $seuNome!";

?>

Para executa-lo, coloque no fim da URL ?seuNome=”seu nome”, por exemplo:www.seusite.com/script.php?seuNome=Felipe, o resultado será o seguinte:

Terceiro exemplo do escopo de variável

Atenção: Em uma aplicação do mundo real, você nunca deve enviar as informações do usuário diretamente pelo navegador, como no exemplo acima. Isto é um risco de segurança.

A superglobal é útil porque permite que você acesse as variáveis globais dentro de funções sem precisar usar a palavra-chave global. Por exemplo:


<?php
     $globalName = "Zoe";

     function Hello() {

        global $globalName;
        echo "Olá, " . $GLOBALS['globalName']. "!<br>";
     }

     Hello();//Resultado Olá, Zoe!

?>

Variáveis estáticas:

Quando você cria uma variável local dentro de uma função, essa variável só existe enquanto a função está sendo executada. Quando a função acaba, a variável local desaparece. Quando a função é chamada novamente, uma nova variável local é criada.

Isto garante que as suas funções são autossuficientes, e que elas funcionam na mesma maneira toda vez que forem chamadas.

No entanto, existem situações onde é útil criar uma variável local que mantém o mesmo valor entre cada chamada da função. É exatamente assim que funcionam as variáveis estáticas.

Para criar uma variável estática, você deve escrever a palavra-chave static antes do nome da variável e atribuir um valor inicial para a variável. Por exemplo:


        function minhaFuncao() {
              static $variavel = 0;
        }

Vejamos uma situação onde as variáveis estáticas são úteis. Digamos que você tenha criado uma função que cria widgets, e retorna o número de widgets criado até então. Você pode tentar fazer isto com variável local:


<?php

     function createWidget() {
          $numWidgets = 0;
          return ++$numWidgets;
     }

     echo "Criando alguns widgets...<br>";
     echo createWidget() . " criado até agora.<br>";
     echo createWidget() . " criado até agora.<br>";
     echo createWidget() . " criado até agora.<br>";

?>

No entanto, toda vez que a função é chamada, a variável $numWidgets é criada, então ela não produz o resultado desejado:

Quarto exemplo do escopo de variável

Se criarmos a variável estática, podemos obter o valor da outra chamada da função, preservando o seu valor:


<?php

     function createWidget() {
         static $numWidgets = 0;
         return ++$numWidgets;
     }

     echo "Criando alguns widgets...<br>";
     echo createWidget() . " criado até agora.<br>";
     echo createWidget() . " criado até agora.<br>";
     echo createWidget() . " criado até agora.<br>";

?>

O resultado será:

Quinto exemplo do escopo da variável

Obs: As variáveis estáticas só mantêm seus valores entre as chamas da função, enquanto o script estiver em execução. Quando acabar a execução do script, as variáveis estáticas são destruídas, bem como as variáveis locais e globais.

Fonte: http://www.treinaweb.com.br/ler-artigo/20/tudo-que-voce-precisa-saber-sobre-escopo-de-variavel-no-php

Deixe um comentário