Curso de PHP: Funções - PARTE III - Escopo de Variável, passagem de parâmetros por valor e por função
Ainda falando sobre funções, ensinarei outro ponto importante sobre funções. O escopo de uma variável. O escopo é a definição de um limite de território. Quando dizemos escopo de variável, estamos nos referindo até onde uma variável é válida.
Quando iniciamos um script, todas as variáveis que forem escritas nele, fora de uma função ou classe, estarão disponíveis em toda execução do script. Do começo ao fim da execução. Essas variáveis estão no escopo GLOBAL do script.
Exemplo:
<?php
$nome = "Fulano da Silva";
//no final do script
echo $nome;O exemplo acima define uma variável no início que pode ser usada até o fim do script. Isso não é nada novo.
Já quando criamos uma função, seus parâmetros e todas as variáveis que utilizarmos até o fechamento da função, estará em um escopo diferente do global, no escopo da função. Isso quer dizer que as variáveis que utilizarmos dentro da função, serão válidas somente dentro da função. Por exemplo:
<?php
$nome = "Fulano da Silva";
$idade = 25;
function qualquer($idade) {
$nome = "Cicrano de tal";
echo $nome . "<br />";
echo $idade;
}
qualquer(10);
//no final do script
echo $nome . "<br />";
echo $idade;Se você testar o código acima, vai ver que o nome e a idade impresso na primeira vez o "Cicrano de tal" e 10. Depois será impresso o nome e a idade "Fulano da Silva" e 25. Mas como isso? Dentro da função é um escopo diferente, o que nos permite ter o mesmo nome de variável que em outro ponto do script, porém, não são as mesmas variáveis.
E se for necessário acessar uma variável de fora da função, já que são de outro escopo? Há algumas alternativas:
- Passar como parâmetro por valor
- Usar a instrução global
- Utilizar uma superglobal
- Passar como parâmetro por referência
Passando a variável por parâmetro, podemos utilizar seu valor dentro da função, mas ainda assim não conseguimos alterar o valor fora do escopo.
Utilizando a instrução global antes do nome da variável indica que a variável, dentro da função, é a mesma de fora da função. Exemplo:
<?php
$nome = "Fulano da Silva";
$idade = 25;
function qualquer($idade) {
global $nome;
$nome = "Cicrano de tal";
echo $nome . "<br />";
echo $idade;
}
qualquer(10);
//no final do script
echo $nome . "<br />";
echo $idade;Dessa vez será impresso duas vezes o nome "Cicrano de tal" o que mostra que a variável $nome de dentro da função passou a ser a mesma de fora da função.
No PHP existem as variáveis superglobais, que são as variáveis predefinidas do PHP. Todas essas variáveis estão disponíveis em qualquer lugar do seu script, dentro ou fora de funções, sem a necessidade do uso da palavra global.
Inclusive, para esse uso exclusivo de utilizar a variável em qualquer lugar, existe a superglobal $GLOBALS. Seu uso é muito simples:
<?php
$GLOBALS['nome'] = "Fulano da Silva";
$idade = 25;
function qualquer($idade) {
$GLOBALS['nome'] = "Cicrano de tal";
echo $GLOBALS['nome'] . "<br />";
echo $idade;
}
qualquer(10);
//no final do script
echo $GLOBALS['nome'] . "<br />";
echo $idade;Para fazer uso das variáveis globais, utilizamo-as como um array.
E o último, e muito usado, é passar a referência da variável para uma função. Quando passamos por parâmetros, normalmente, o PHP pega o valor da variável que passarmos e efetua uma cópia do valor. Nesse momento o PHP passa a ter pelo menos uma variável a mais (o parâmetro) que tem um valor que pode mudar em qualquer momento dentro da função, sem mudar a variável fora da função.
Mas podemos optar por passar uma variável por referência. Quando passamos uma variável por referência, qualquer alteração feita no valor do parâmetro, afetará a variável de fora da função. Para passar a referência de uma variável para uma função, ou até para outra variável, temos que escrever o operador & antes do nome da variável. Veja exemplos de passagem de parâmetros por referência:
<?php
$nome = "Fulano da Silva";
$idade = 25;
function qualquer(&$idade) {
$nome = "Cicrano de tal";
$idade = 10;
echo $nome . "<br />";
echo $idade;
}
qualquer($idade);
//no final do script
echo $nome . "<br />";
echo $idade;ou
<?php
$nome = "Fulano da Silva";
$idade = 25;
function qualquer($idade) {
$nome = "Cicrano de tal";
$idade = 10;
echo $nome . "<br />";
echo $idade;
}
qualquer(&$idade);
//no final do script
echo $nome . "<br />";
echo $idade;Veja que você pode tanto indicar que a variável irá ser passada por referência na definição da função (o mais comum) como também na hora de chamar a função.
O próximo e último post sobre funções, explicarei sobre as formas de retornar os resultados de uma função.
| Anexo | Tamanho |
|---|---|
| MANJAPHP_CURSOPHP_FUNCOES_III.pdf | 97.24 KB |
- Login to post comments




