Encapsulamento:
O encapsulamento é o ato de você provê uma proteção de acesso aos membros internos de um objeto. A classe é responsável por seus atributos, e dessa forma podemos acessar esses atributos apenas com métodos da própria classe, ou seja, criamos métodos dentro dessa classe para alterar os atributos. Os atributos (propriedades) nunca devem ser acessadas de fora da classe, pois assim temos uma segurança maior sobre seus valores.
Para trabalharmos com o encapsulamento devemos entender como funciona a visibilidade dos atributos e métodos de um objeto.
Visibilidade
No PHP existem três tipos de visibilidade
private: Atributos ou métodos declarados como private só podem ser acessados dentro do escopo da própria classe em que foram declarados. Ou seja, não podemos acessar a partir de outras classes descendentes. Essa visibilidade é muito comum em atributos e raro em métodos. Na UML representamos o private com um sinal de subtração (-)
protected: Atributos ou métodos declarados com protected somente podem ser acessadas dentro da própria classe ou a partir de classes descendentes (herdadas). Na UML representamos essa visibilidade através do sinal de sustenido (#).
public: Atributos ou métodos como public podem ser acessados de forma livre, a partir da própria classe, a partir de classes descendentes e a partir de programas que fazem uso dessa classe. Na UML usamos o sinal de adição (+) para representar a visibilidade public.
Se não declaramos visibilidade em membros (atributos e métodos) de uma classe automaticamente Será do tipo public.
Testando na prática:
Criando a classe funcionario.class.php
< ?php class funcionario { private $Codigo; private $Nome; private $Salario; } ?>
< ?php //arquivo testa-private.php //carregando a classe funcionario include_once'funcionario.class.php'; $marcos = new funcionario; $marcos->Salario = 1.000; echo "teste"; ?>
Veja o erro mostrado pelo PHP:
Isso porque tentamos alterar um atributo com a visibilidade igual a private. Para conseguir modificar esse atributo vamos criar um método para isso. Veja o complemento do arquivo funcionário.class.php
< ?php class funcionario { private $Codigo; private $Nome; private $Salario; //função para “setar” um valor no atributo salario function SetSalario($Salario) { //antes de passar o valor do salario verificamos se o mesmo e um numero e positivo, se sim, passamos o valor para o atributo if (is_numeric($Salario) and ($Salario > 0)) { $this->Salario = $Salario; } } //funcao para mostrar o salario function GetSalario() { echo "O salário é: {$this->Salario}"; } } ?>
Na próxima matéria vamos ver a visibilidade protected. Até lá!
Comentários
Uma resposta para “Encapsulamento e visibilidade -PHP (parte I)”
Parabéns pelo artigo! Muito bem escrito e explicado. Esse blog tá ficando cada vez mais “bala”.