Visibilidade em PHP Orientado a Objetos
Visibilidade em orientação a objetos diz repeito a como os atributos e métodos podem ser acessados.
<?php
class Post{
public $tipo;
private $data;
protected $titulo;
protected $resumo;
}
$post = new Post();
$post->tipo = "Teste de Tipo";
echo $post->tipo;
Na classe Post temos 4 atritubos com visibilidade diferentes. O único atributo que pode ser acessado pela instância da classe é o $tipo, pois o mesmo é public. Os demais atributos não podem ser acessados tendo em vista que são private e protected.
Então como fazemos para acessar esses atributos?
É muito simples. Basta utilizarmos métodos public.
<?php
class Post{
public $tipo;
private $data;
protected $titulo;
protected $resumo;
public function setTitulo($titulo){
$this->titulo = $titulo;
}
public function getTitulo(){
return $this->titulo;
}
}
$post = new Post();
$post->tipo = "Back-end";
echo $post->tipo;
echo "
";
$post->setTitulo("Visibilidade em PHP Orientado a Objetos");
echo $post->getTitulo();
Desta forma utilizamos métodos public que irão setar e pegar o valor do atributo $titulo. Os métodos acessam o atributo utilisando o "$this->nome_do_atributo" . Tanto atributos protected quanto private precisam de métodos para serem acessados.
Então qual a diferença de protected para private?
A diferença é que métodos protected podem ser herdados por outras classes.
<?php
class Post{
public $tipo;
private $data;
protected $titulo;
protected $resumo;
public function setTitulo($titulo){
$this->titulo = $titulo;
}
public function getTitulo(){
return $this->titulo;
}
}
class Artigo extends Post{
private $descricao;
public function setDescricao($descricao){
$this->descricao = $descricao;
}
public function getDescricao(){
return $this->descricao;
}
}
$artigo = new Artigo();
$artigo->setTitulo("Visibilidade em PHP Orientado a Objetos");
echo $artigo->getTitulo();
$artigo->setDescricao("Aprenda como funciona a visibilidade em php orientado a objetos.");
echo $artigo->getDescricao();
Desta forma os atributos e métodos public e protected serão herdados da classe Post pela classe Artigo.
Criamos também um atributo e métodos novos para a descrição.
Importante também dizer que o atributo $data não será herdado, pois é um atributo private.