Vous êtes sur la page 1sur 9

PHP Orientado a Objetos: Para quem est comeando

criado por Everton da Rosa em 10/06/2009 4:52pm

Introduo H algum tempo utilizo PHP para desenvolver aplicaes web based, porm nunca utilizando orientao a objeto (OO). Um tanto por no ter muito interesse nisso (pois isso para mim um hobby), mas muito porque os artigos sobre o tema so um tanto confusos para mim. Por isso este ano decidi realmente aprender a orientao a objetos no PHP. Fruto desse aprendizado este primeiro artigo sobre o tema e que tem por objetivo apenas apresentar de forma sucinta, clara, objetiva e de fcil compreenso pelos iniciantes do que a orientao a objeto, seus principais conceitos e como fazer isso funcionar na prtica. Quando falamos em orientao a objetos (OO), em PHP, estamos falando basicamente de classes, mtodos e propriedades. Classe, no PHP, um bloco de cdigo escrito na forma abaixo:
<?php class NomeDaClasse { // Algum cdigo aqui } ?>

Basicamente o nome da classe, precedido da palavra reservada class e seguida de um par de colchetes {} o qual delimitar o cdigo da classe. Cada classe, no PHP, um objeto, ou seja, uma coleo de mtodos e propriedades. Mas o que so mtodos e propriedades? Se voc sabe o que uma varivel no PHP, sabe o que propriedade, pois propriedades nada mais so do que as variveis internas de uma classe, ou seja, so variveis que voc coloca dentro dos colchetes {} da classe. Mtodos so as funes internas das classes, ou seja, as funes que voc coloca entre os colchetes {} da classe. Abaixo um exemplo de classe, com mtodos e variveis.
<?php class NomeDaClasse { // As propriedades e ... $propriedade; $outra_propriedade = 'algum texto';

// ... os mtodos function meuMetodo(){ // Algum cdigo aqui } function outroMetodo($parametro){ // Algum cdigo aqui } } ?>

Muito bem, agora que sabemos estes trs conceitos, vamos prtica, ou seja, vamos fazer uma classe, com seus mtodos e variveis, e ver como tudo funciona. Criando uma classe Agora o momento de colocarmos em prtica os conceitos de classe, mtodos e propriedades. Para isso vamos construir uma classe de interao com o MySQL. Essa classe dever fazer algumas coisas: Conectar ao servidor MySQL e selecionar o banco de dados desejado; Configurar as variveis (propriedades) dinamicamente; Executar consultas ao banco de dados, retornando o resultado; Retornar a string SQL usada na consulta. Abaixo est o cdigo completo da classe (mas no se preocupe, abaixo do cdigo vamos explic-lo passo a passo):
<?php /* * Script para estudo sobre PHP e Orientao a Objetos * @author Everton da Rosa (Everton3x) * @copyright GPL * @version 1.0 (21/04/2009) */ class TutoDB { /* * Classe para interao com banco de dados * @author Everton da Rosa (Everton3x) * @version 1.0 (21/04/2009) */ /*

* Declarao das variveis (propriedades) da classe */ private $host; // Host (Servidor) que executa o banco de dados private $user; // Usurio que se conecta ao servidor de banco de dados private $pass; // Senha do usurio para conexo ao banco de dados private $db; // Nome do banco de dados a ser utilizado private $sql; // String da consulta SQL a ser executada /* * Funo para conexo ao banco de dados * @author Everton da Rosa (Everton3x) * @return Object Retorna o objeto da conexo */ function conectar() { $con = mysql_connect($this->host, $this->user, $this->pass) or die($this->erro(mysql_error())); return $con; } /* * Funo para seleo do banco de dados a ser usado * @author Everton da Rosa (Everton3x) * @return Boolean Retorna true (verdadeiro) ou false (falso) */ function selecionarDB() { $sel = mysql_select_db($this->db) or die($this>erro(mysql_error())); if ($sel) { return true; } else { return false; } } /* * Funo para execuo da consulta ao banco de dados * @author Everton da Rosa (Everton3x) * @return Object $qry Retorna o resultado da consulta como um objeto */ function query()

{ $qry = mysql_query($this->sql) or die ($this>erro(mysql_error())); return $qry; } /* * Funo para atribuir valores s propriedades da classe * @author Everton da Rosa (Everton3x) * @param String $prop Nome da propriedade que ter seu valor atribudo * @param String, Array, Object Valor a ser atribudo * @return void No d nenhum retorno */ function set($prop, $value) { $this->$prop = $value; } /* * Funo para retornar a string SQL * @author Everton da Rosa (Everton3x) * @return String String SQL */ function getSQL() { return $this->sql; } /* * Funo para exibir os error * @author Everton da Rosa (Everton3x) * @param String $erro Erro a ser exibido * @return void No d nenhum retorno */ function erro($erro) { echo $erro; } } ?>

Inicialmente, indicamos a classe com a palavra-chave class e damos um nome a ela (TutoDB).

class TutoDB {

Em seguida, definiremos as propriedades da classe, que nada mais so do que variveis que podem ou no receber valores desde j. No nosso casso, apenas definiremos as variveis. Caso quisssemos atribuir-lhes valor, faramos $host = 'localhost'; por exemplo.
/* * Declarao das variveis (propriedades) da classe */ $host; // Host (Servidor) que executa o banco de dados $user; // Usurio que se conecta ao servidor de banco de dados $pass; // Senha do usurio para conexo ao banco de dados $db; // Nome do banco de dados a ser utilizado $sql; // String da consulta SQL a ser executada

Aqueles que j trabalham com classes sentiro falta das palavras public, private ou protected. Como disse inicialmente, este um artigo bsico. A questo sobre visibilidade fica para um prximo. As propriedades que foram definidas servem para armazenar o host MySQL, o usurio, a senha e o banco de dados, alm da string de consulta SQL ($host, $user, $pass, $db e $sql, respectivamente). Depois disso, iniciaremos com os cdigos do nossos mtodos. Temos seis mtodos na nossa classe: conectar() serve para estabelecer uma conexo ao servidor MySQL (o host); selecionarDB() serve para selecionar o banco de dados desejado; query() executa a consulta ao banco de dados; set() o mtodo que atribui os valores s nossas propriedades; getSQL() retorna a String SQL atribuda propriedade $sql; erro() exibe mensagens de erro; importante salientar que no sero explicados o que cada mtodo faz, pois isso fugiria do escopo do artigo. O importante que se entenda que propriedades so objetos que so armazenados dentro da classe e que so utilizados geralmente pelos mtodos e que mtodos so partes da classe que fazem alguma coisa, geralmente baseados nas propriedades. Na prxima parte do artigo veremos como utilizar esta classe e aprenderemos mais sobre a interao entre propriedades e mtodos. Utilizando a classe Agora que temos a nossa classe pronta, vamos ver o que ela faz e entender um pouco mais sobre mtodos e propriedades e a interao entre eles.

Primeiramente devemos instanciar a classe, ou seja, criar um objeto na memria que ir representar a classe TutoDB. Isso ns conseguimos da seguinte maneira:
$obj = new TutoDB;

Com isso estamos dizendo ao PHP para armazenar na varivel $obj uma nova instncia da classe TutoDB. Depois vamos atribuir valores s nossas propriedades da seguinte forma:
$obj->set('db','information_schema'); $obj->set('host','localhost'); $obj->set('user','root'); $obj->set('pass',''); $obj->set('sql','select * from COLLATIONS');

Com isso dizemos ao PHP para utilizar o mtodo set() do objeto armazenado em $obj (a classe TutoDB) para atribuir propriedade passada pelo primeiro argumento o valor do segundo argumento. Argumentos so os valores passados entre os parnteses das funes ou mtodos. No caso da primeira linha, estamos dizendo para que seja colocado o valor information_schema na propriedade $db. Poderamos fazer isso de outra forma, sem utilizar um mtodo, mas atribuindo diretamente um valor para a propriedade assim:
$obj->db = 'information_schema';

Por que ento utilizamos um mtodo para fazer isso? Vamos supor que quisssemos que a propriedade $user armazene apenas os valores 'root' ou 'admin'. Se deixssemos para atribuir valores em $user da forma $obj->user, qualquer valor poderia ser atribudo, mas se utilizamos um mtodo para isso (no nosso caso, set()), podemos, dentro do mtodo, colocar um cdigo que verifique se o valor passado para ser armazenado na propriedade $user seja apenas root ou admin. Vamos aproveitar e ver o mtodo set():
/* * Funo para atribuir valores s propriedades da classe * @author Everton da Rosa (Everton3x) * @param String $prop Nome da propriedade que ter seu valor atribudo * @param String, Array, Object Valor a ser atribudo * @return void No d nenhum retorno

*/ function set($prop, $value) { $this->$prop = $value; }

Veja que a atribuio de valor propriedade feita no seguinte esquema:


$this->$prop = $value;

Onde: $this referencia a prpria classe. Precisamos fazer referncia classe pois se colocssemos apenas $prop = $value, estaramos dizendo ao PHP para atribuir $value a uma varivel chamada $prop, que poderia estar at mesmo fora da nossa classe. Note tambm que o que o mtodo faz apenas $this->nomedapropriedade = valor a ser atribudo. Seguindo... Vamos conectar com o servidor MySQL com o mtodo conectar() da seguinte forma:
$obj->conectar(); // Realiza a conexo /* * Funo para conexo ao banco de dados * @author Everton da Rosa (Everton3x) * @return Object Retorna o objeto da conexo */ function conectar() { $con = mysql_connect($this->host, $this->user, $this->pass) or die($this->erro(mysql_error())); return $con; }

Vejam que o mtodo pega os valores das propriedades $host, $user e $pass para conectar ao servidor MySQL (mysql_connect($this->host,$this->user, $this->pass)), ou se der erro, para o script e chama o mtodo erro() massando-lhe o parmetro mysql_error() ( or die($this>erro(mysql_error()))) Depois disso selecionamos o banco de dados desejado (que foi informado na propriedade $db):
$obj->selecionarDB(); // Seleciona o banco de dados

Em seguida realizamos a consulta ao banco de dados:


$rs = $obj->query();

Todos os trs mtodos seguem um mesmo padro: usam os valores armazenados nas propriedades para realizar alguma coisa. Ainda falta pegarmos a string SQL com o seguinte cdigo:
$sql = $obj->getSQL(); // Pega o valor da propriedade $sql

Observe que o mtodo getSQL() apenas retorna o valor armazenado na propriedade $sql. Poderamos fazer isso tambm da seguinte forma:
$obj->sql;

Por fim, vamos escrever algo para mostrar que nossa classe funciona:
echo 'O nmero de linhas encontrado para a consulta '.$sql.' de '.mysql_num_rows($rs); // Exibe o nmero de linhas do resultado

Se tudo funcionar, no navegador deve aparecer uma mensagem do tipo: O nmero de linhas encontrado para a consulta select * from COLLATIONS de 127 Agora temos o cdigo completo para usarmos nossa classe:
/* * Testando a classe */ $obj = new TutoDB; // Instanciando a classe // Atribuindo valores s propriedades da classe $obj->set('db','information_schema'); $obj->set('host','localhost'); $obj->set('user','root'); $obj->set('pass',''); $obj->set('sql','select * from COLLATIONS'); $obj->conectar(); // Realiza a conexo $obj->selecionarDB(); // Seleciona o banco de dados $rs = $obj->query(); $sql = $obj->getSQL(); // Pega o valor da propriedade $sql echo 'O nmero de linhas encontrado para a consulta '.$sql.' de '.mysql_num_rows($rs); // Exibe o nmero de linhas do resultado

Agora que sabemos o bsico cobre classes, propriedades e mtodos, vamos na concluso abordar os principais conceitos do artigo. Resumo final Para finalizar o artigo, faremos um apanhados dos principais conceitos nele abordados: Classes so blocos de cdigo, geralmente tratando de operaes relacionadas (banco de dados, arquivos etc) e que devem ser instanciadas (colocadas na memria) para serem usadas. Isso se faz da seguinte forma:
$variavel = new NomeDaClasse;

Propriedades so variveis internas da classe que servem para armazenar dados que sero utilizados por mtodos. Para atribuir diretamente dados s propriedades fazemos:
$variavel->nome_da_propriedade = dados a serem atribudos;

Para "ver" o que est armazenado na propriedade, fazemos o seguinte:


$variavel->nome_da_propriedade;

Mtodos so funes internas das classes que realizam alguma coisa, geralmente tomando por base os dados armazenados nas propriedades. Para executar um mtodo, fazemos o seguinte:
$variavel->metodo();

Dentro dos mtodos, as propriedades e outros mtodos internos da classe so referenciados utilizando $this:
$this->nome_da_propriedade; $this->nomeDoMetodo();

Espero que o leitor, principalmente o iniciante, tenha aprendido um pouco mais sobre classes, item bsico para a compreenso do que programao orientada a objetos no PHP.

Comentrio