Dev (Back & Front)ARTIGO

Magic Methods PHP 5 – Orientação a Objetos com PHP + CodeIgniter

Algum tempo atrás lí a seguinte frase:

“Programação OO em PHP está se resumindo a programação orientada a métodos”

Não lembro mais onde vi isso (se alguém souber, me avise), mas essa frase me impactou para uma reflexão sobre os códigos que vinha e venho escrevendo em PHP.

Salvo pelo uso de frameworks que acabam inevitavelmente herdando características e métodos de suas classes principais, muitos scripts PHP acabam se tornando um agrupamento de métodos e funções agregados em uma classe.

Criar uma classe simplesmente para dar include em arquivos externos ou chamar funções não é orientação a objetos.

Este artigo objetiva apresentar de uma forma bastante simplificada a representação de uma classe pessoa através da criação de dois objetos pessoa distintos aplicando esta metodologia ao framework CodeIgniter.

Desta forma teremos um controlador chamado pessoa que é também a nossa classe e uma view para apresentar os dados. Tudo muito simples.
O foco do artigo está nos “Magic Methods” do PHP5. Vamos utilizar apenas 3 dos 14 Magic Methods num primeiro momento, o __get(),o __set() e o __construct. Em uma continuação trabalharemos com os demais médotos.

Neste primeiro artigo não apresentarei a abstração da classe, para que fique o mais simples possível. No segundo faremos a abstração e uso de Interface.

O PHP não permite herança multipla, por isto não poderemos herdar propriedades de mais de uma classe, e como nossa classe pessoa já herda as propriedades de controller precisaremos criar nossa classe pessoa seguindo o modelo real de uso, ou seja, a representação da nossa classe concreta.

Vamos ao código do controlador pessoa.php

<?php
class Pessoa extends Controller {

private $nome;
private $cpf;
private $sexo;

function __construct()
{
parent::Controller();
}

public function __set($campo,$valor){
$this->$campo = $valor;
}

public function get($campo){
return $this->$campo;
}

function index()
{
$data = array();

$joao = new pessoa();
$joao->nome = "JOAO";
$joao->sexo = "M";
$joao->cpf = "123.456.789-00";

$leticia = new pessoa();
$leticia->nome = "LETICIA";
$leticia->sexo = "F";
$leticia->cpf = "987.654.321-99";

$data['joao']['nome'] = $joao->nome;
$data['joao']['sexo'] = $joao->sexo;
$data['joao']['cpf'] = $joao->cpf;

$data['leticia']['nome'] = $leticia->nome;
$data['leticia']['sexo'] = $leticia->sexo;
$data['leticia']['cpf'] = $leticia->cpf;

$this->load->view('pessoa',$data);
}
}

O importante a observar neste código é que estamos utilizando o __construct() e não repetindo o nome da classe para o construtor, igualmente também poderemos ter um método __destruct() que, por exemplo, poderia limpar uma sessão de login após o envio de uma determinada mensagem ou limpar um carrinho de compras ao final do seu processamento.

E o não menos importante, os métodos __get() e __set() que permitem ajustarmos e recuperarmos qualquer atributo público da classe sem a necessidade de construir os “getters” e “setters” um a um.

Isto faz com que possamos acessar atributos privados de nossas classes de maneira mais segura e semântica e com muito menos trabalho. Da para perceber que o PHP fica a cada dia mais parecido com o Java e o C# neste sentido, reservadas as proporções.

Vamos às explicações:

O método mágico __set().

public function __set($campo,$valor){
        $this->$campo = $valor;
 }

É muito simples de compreender de que forma estamos acessando cada atributo, ao receber dois parâmetros sendo o primeiro o atributo e o segundo o valor atribuído, o método ajusta automaticamente estes valores.

E isto é acessado no seguinte código.

$joao->nome = "JOAO";

O método __get é ainda mais simples pois apenas retorna o valor de um atributo, onde this é o próprio objeto concreto, a instância da classe, apontando para o valor atribuído aquela variável.

public function get($campo){
return $this->$campo;
}

Ou seja para recuperar um valor basta apontar para ele da seguinte maneira.

$joao->nome;

Levando em consideração que $joao é a instância do objeto e não a classe em si.

Acompanhem os próximos artigos para ver como fica a abstração da classe pessoa e o estudo dos demais métodos mágicos do PHP 5.

Pesquisador, doutorando na Faculdade de Engenharia Elétrica e Ciência da Computação da Universidade de Newcastle (UON), Austrália. Mestre em Computação Aplicada com ênfase em Engenharia de Sistemas Computacionais pela Universidade Tecnológica Federal do Paraná (UTFPR). Bacharelado em Sistemas de informação pela Universidade do Estado de Santa Catarina (UDESC). Autor dos títulos "Análise de Redes Sociais: uma visão computacional" (2015), "PHP e MVC com CodeIgniter" (2012) e "CodeIgniter Framework PHP" (2010), todos pela editora Novatec. Professor universitário, entusiasta de tecnologia e internet desenvolve pesquisa sobre redes sociais e redes complexas. Siga no Twitter @agabardo

Ver perfil