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.