Escopo de Atributo Public
Você pode declarar seus atributos com a palavra chave public antes:class Pessoa
{
public $nome;
}
Isso significa que ele pode ser acessado e alterado do lado de fora por qualquer pessoa ou entidade:
$alguem = new Pessoa();
$alguem->nome = "Neil Peart";
$name = $alguem->nome;
echo "Nome da pessoa: $name";
Escopo de Atributo Private
Esse só pode ser acessado de dentro da clase.class Pessoa
{
private $nome;
}
Para definirmos um valor para esse atributo, temos que criar um método setter:
class Pessoa
{
private $nome;
public function setNome($name) {
$this->nome = $name;
}
}
Escopo de Atributo Protected
Assim como algumas funções querem que variáveis existam somente dentro de seu escopo, podemos querer o mesmo em classes.Para isso, usamos a palavra-chave protected:
class Pessoa
{
protected $nome;
}
Porém, atributos do tipo protected estão disponíveis para serem acessados e modificados por classes herdadas, o que é uma características não existente no modo private.
Escopo de Atributo Final
Fazendo com que uma variável seja final, você previne que ela seja sobrecarregada por uma subclase, ou seja, que outra classe defina um atributo 'por cima' na hora da herança.class Pessoa
{
final $nome;
}
Discutiremos esse assunto mais em detalhes adiante.
Escopo dos Métodos
Assim como atributos, métodos também possuem seus escopos de níveis de encapsulação.O public, permite que você invoque ele de qualquer lugar do código, como já fizemos alguma vezes.
Já o privado é mais recluso, não pode ser invocado por subclasses ou objetos instanciados.
O protected pode ser invocado por suas subclasses e em qualquer lugar da classe, sem problemas.
Existe ainda um tipo especial, chamado de abstract.
Ele é declarado na classe pai, porém só é implementado nas classes filhas.
Por exemplo, a classe:
class Animal
{
abstrc som();
}
Só isso.
Então a classe filha, que vai herdar a classe pai (ainda vamos estudar), é que implementa essa classe.
Se for um leão, implementa um som.
Se for uma cobra, implementa outro som.
Por fim, o escopo final, que assim como no atributo, evita que ela seja sobrescrita por qualquer classe herdada. Ela é a implementação única e final daquele método.