Gostou do nosso conteúdo? Te ajudou?
Nos ajude também! Faça um PIX, de qualquer valor:
programacao.progressiva@gmail.com

Escopo de Atributos e Métodos: public, private, protected, final e static

Neste tutorial, vamos aprender algumas palavras-chaves que permitem que nosso escopo tenha um comportamento especial relativo a segurança dos dados contidos.

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.