Escopo
É o contexto delimitante aos quais valores e expressões estão associados
É utilizado para definir o grau de ocultação de informação, isto é, a visibilidade e acessibilidade às variáveis em diferentes partes do programa.
As funções em PHP possuem seu escopo restrito de forma a tornar o bloco de instrução da função isolado.
Em PHP temos diversos escopos:
* Escopo global
* Escopo de funções
* Escopo de classes
* Escopo de namespace
Escopo de variável global
Variáveis globais só podem ser acessadas dentro das funções se forem declaradas
Escopo de variável|Função|Local
O escopo de uma variável é o contexto onde foi definida. A maioria das variáveis do PHP tem somente escopo local.
Variáveis locais só podem ser acessadas dentro da função que a criou
for($i=0;$i<10 $i++){ }
$i é uma variável local
Uma variável criada dentro de uma função é destruída ao final da execução da própria função;
$GLOBALS
É um array associativo, que tem como chaves os nomes das variáveis globais e o conteúdo dessas variáveis como o valor do elemento do array.
Pode-se usar a palavra reservada "global" antes de declarar uma variável em uma função para ter acesso às variáveis globais dentro daquela função
$cachorro = Bob;
function latir (){
global $cachorro;
echo "Au Au - latiu " . $cachorro;
}
$cachorro = Bob;
function latir (){
echo "Au Au - latiu " . $GLOBAL['cachorro'];
}
VISIBILIDADE
Encapsulamento das variáveis e funções
Uma função pode ser ao mesmo tempo:
public e static
private e static
protected e constant
Public
----------------------------------------
É a farra do boi. Todos tem acesso as funções e variáveis de dentro e de fora da Classe
Private
------------------------------------------
É a invisibilidade total. Uma função com visibilidade private é invisível até para as Classes Filhas que estendem a Classe Pai.
Private functions não são herdadas pelas Classes Filhas e não permitem que estas sobrescrevam as funções usando o mesmo nome.
Como as funções protected, podem ser acessadas por funções públicas que façam acesso aos dados privados
Protected
-----------------------------------------
É mais seguro que Public.
A Classe Filha pode acessar, usar e sobrescrever as funções herdadas da Classe Pai
Class Pessoa {
protected $nome = 'Paulo';
}
Não permite que as funções e variáveis sejam acessadas(diretamente) fora do arquivo que criou ou estendeu a classe.
$pessoa = new Pessoa();
$pessoa->nome; Não funciona!!!
Para acesso, deve-se ter uma função public que faça o acesso aos dados protegidos.
Faz parte do Encapsulamento como os métodos Geters() e Setters().
Escopo de Classes
Fontes:
https://pt.stackoverflow.com/questions/135572/qual-a-diferen%C3%A7a-entre-escopo-e-tempo-de-vida/135573 - explicação sobre escopo bem detalhada