Mesmo se você desenvolver um novo programa PHP em grande escala, inevitavelmente usará dados globais, porque alguns dados serão usados em diferentes partes do seu código. Alguns dados globais comuns incluem: classes de configuração de programa, classes de conexão de banco de dados, informações do usuário, etc. Há muitas maneiras de tornar esses dados globais, a mais comumente usada é usar a declaração de palavra-chave "global", que explicaremos em detalhes posteriormente neste artigo.
A única desvantagem de usar a palavra-chave "global" para declarar dados globais é que ela é, na verdade, uma forma muito pobre de programação e muitas vezes leva a problemas maiores posteriormente no programa, porque os dados globais separam seu código. Os segmentos de código estão todos vinculados. juntos, portanto, se você alterar uma parte do código, isso poderá fazer com que outras partes dêem errado. Portanto, se houver muitas variáveis globais em seu código, será difícil manter todo o seu programa.
Este artigo mostrará como evitar esse problema de variável global por meio de diferentes técnicas ou padrões de design. Claro, primeiro vamos ver como usar a palavra-chave “global” para dados globais e como ela funciona. Usando variáveis globais e a palavra-chave "global",
o PHP define algumas variáveis "Superglobais" por padrão. Essas variáveis são globalizadas automaticamente e podem ser chamadas em qualquer lugar do programa, como $_GET e $_REQUEST, etc. Eles geralmente vêm de dados ou outros dados externos, e o uso dessas variáveis geralmente não causa problemas porque basicamente não são graváveis.
Mas você pode usar suas próprias variáveis globais. Usando a palavra-chave “global” você pode importar dados globais para o escopo local de uma função. Se você não entende o "escopo de uso de variáveis", consulte as instruções relevantes no manual do PHP.
A seguir está um exemplo de demonstração usando a palavra-chave "global":
A seguir está o conteúdo citado:
<?php
$my_var = 'Olá mundo';
teste_global();
função teste_global() {
// Agora no escopo local
// a variável $my_var não existe
// Produz erro: "Variável indefinida: my_var"
echo $minha_var;
// Agora vamos dar importância à variável
global $minha_var;
// Funciona:
echo $minha_var;
}
?>
Como você pode ver no exemplo acima, a palavra-chave "global" é usada para importar variáveis globais. Parece que funciona bem e é simples, então por que nos preocupamos em usar a palavra-chave “global” para definir dados globais?
Aqui estão três boas razões:
1. A reutilização de código é quase impossível
Se uma função depende de variáveis globais, é quase impossível usar esta função em ambientes diferentes. Outro problema é que você não pode extrair essa função e usá-la em outro código.
2. Depurar e resolver problemas é muito difícil.
Rastrear uma variável global é muito mais difícil do que rastrear uma variável não global. Uma variável global pode ser redefinida em algum arquivo de inclusão obscuro e, mesmo que você tenha um editor de programa (ou IDE) muito bom para ajudá-lo, pode levar várias horas para descobrir o problema.
3. Será muito difícil entender esses códigos.
É difícil para você descobrir de onde vem uma variável global e para que ela é usada. Durante o processo de desenvolvimento, você pode conhecer todas as variáveis globais, mas depois de cerca de um ano, poderá esquecer pelo menos algumas delas. Neste momento, você se arrependerá de ter usado tantas variáveis globais.
Então, se não usarmos variáveis globais, o que usaremos? Vejamos algumas soluções abaixo.
Usando Parâmetros de Função
Uma maneira de parar de usar variáveis globais é simplesmente passar a variável como parâmetro para a função, conforme mostrado abaixo:
A seguir está o conteúdo da citação:
<?php
$var = 'Olá mundo';
teste ($var);
teste de função($var) {
eco $var;
}
?>
Se você só precisa passar uma variável global, então esta é uma solução muito boa ou até excelente, mas e se você quiser passar muitos valores?
Por exemplo, suponha que queiramos usar uma classe de banco de dados, uma classe de configurações de programa e uma classe de usuário. Em nosso código, essas três classes são utilizadas em todos os componentes, portanto devem ser passadas para cada componente. Se usarmos o método de parâmetro de função, temos que fazer o seguinte:
O seguinte é o conteúdo citado:
<?php
$db = nova DBConnection;
$configurações = novas configurações_XML;
$usuário = novo usuário;
teste($db, $configurações, $usuário);
teste de função(&$db, &$configurações, &$usuário) {
// Faça algo
}
?>
Obviamente, isso não vale a pena, e assim que tivermos novos objetos para adicionar, teremos que adicionar mais um parâmetro de função para cada função. Portanto, precisamos usar outra maneira de resolvê-lo.