Olá amigos. O PHP5 implementa um aspecto importante da OOP: a visibilidade. E nesta versão possuímos 3 níveis de acesso: public, protected e private. Vamos conhecer cada um delas nas próximas linhas.
- Public: Todo atributo, propriedade ou método definido como public pode ser acessado de qualquer lugar da aplicação, é considerado global.
- Protected: Todo atributo, propriedade ou método definido como protected só pode ser acessado dentro da classe que o implementa e dentro das classes herdadas da classe que contem o membro.
- Private: Todo atributo, propriedade ou método definido como private só pode ser acessado dentro da classe que o definil gerando um erro de acesso a classes externas mesmo que herdem da classe que contém o membro.
Segue abaixo a implementação com atributos:
<?php
//Classe
class Access1
{
//Atributos com nível de acesso
public $publico = "Acesso publico ! <br />";
protected $protegido = "Acesso protegido ! <br />";
private $privado = "Acesso privado ! <br />";
//Construtor da classe
public function __construct()
{
echo $this->publico;
echo $this->protegido;
echo $this->privado;
}
}
//Instância (Objeto)
$obj = new Access1();
?>
Esta implementação gera o seguinte retorno:
Acesso publico !
Acesso protegido !
Acesso privado !
Conseguimos acessar todos os atributos, pois estamos utilizando-os dentro da classe que os define. Agora vamos herdar a classe:
<?php
//Classe
class Access1
{
//Atributos com níuvel de acesso
public $publico = "Acesso publico ! <br />";
protected $protegido = "Acesso protegido ! <br />";
private $privado = "Acesso privado ! <br />";
//Construtor da classe
public function __construct()
{
echo $this->publico;
echo $this->protegido;
echo $this->privado;
}
}
class Access2 extends Access1
{
public function __construct()
{
echo $this->publico;
echo $this->protegido;
echo $this->privado;
}
}
//Instância (Objeto)
$obj = new Access2();
?>
Teremos o seguinte retorno:
Acesso público !
Acesso protegido !
Pois como estamos herdando a classe os membros (nesse caso o atributo) privado não está acessível.
Caso seja necessário acessar os atributos através da instância da classe, somente o atributo público estará disponível:
<?php
//Classe
class Access1
{
//Atributos com nível de acesso
public $publico = "Acesso publico ! <br />";
protected $protegido = "Acesso protegido ! <br />";
private $privado = "Acesso privado ! <br />";
//Construtor da classe
public function __construct()
{
}
}
//Instância (Objeto)
$obj = new Access1();
echo $obj->publico; //Retorna Acesso publico !
echo $obj->protegido; //Retorna Fatal error: Cannot access protected property Access1::$protegido
echo $obj->privado; //Retorna Fatal error: Cannot access private property Access1::$privado
?>
Nesta parte da nossa jornada falamos sobre visibilidade a membros, exemplificando com atributos. Estas definições se aplicam de maneira idêntica a propriedades e métodos também.
Nota: Vale lembrar que, se um nível de acesso não for definido explicitamente, o PHP define como public por padrão.
Nota 2: Interessante citar também que, se você possui um método na classe pai definido como protected, e sobrecarrega este método na classe filha, ele deve ter visibilidade igual ou inferior ao método original. Como seu método da classe pai é protected, então deve ser redefinido como protected ou public.
Qualquer dúvida, basta deixar um comentário abaixo ou entrar em contato comigo.
Até a próxima!