You are on page 1of 9

PHP Orientado a Objetos: Para quem está começando

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

Introdução Há algum tempo utilizo PHP para desenvolver aplicações web based, porém nunca utilizando orientação a objeto (OO). Um tanto por não ter muito interesse nisso (pois isso é para mim um hobby), mas muito é porque os artigos sobre o tema são um tanto confusos para mim. Por isso este ano decidi realmente aprender a orientação 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 fácil compreensão pelos iniciantes do que é a orientação a objeto, seus principais conceitos e como fazer isso funcionar na prática. Quando falamos em orientação a objetos (OO), em PHP, estamos falando basicamente de classes, métodos e propriedades. Classe, no PHP, é um bloco de código escrito na forma abaixo:
<?php class NomeDaClasse { // Algum código aqui } ?>

Basicamente é o nome da classe, precedido da palavra reservada class e seguida de um par de colchetes {} o qual delimitará o código da classe. Cada classe, no PHP, é um objeto, ou seja, uma coleção de métodos e propriedades. Mas o que são métodos e propriedades? Se você sabe o que é uma variável no PHP, sabe o que é propriedade, pois propriedades nada mais são do que as variáveis internas de uma classe, ou seja, são variáveis que você coloca dentro dos colchetes {} da classe. Métodos são as funções internas das classes, ou seja, as funções que você coloca entre os colchetes {} da classe. Abaixo um exemplo de classe, com métodos e variáveis.
<?php class NomeDaClasse { // As propriedades e ... $propriedade; $outra_propriedade = 'algum texto';

os métodos function meuMetodo(){ // Algum código aqui } function outroMetodo($parametro){ // Algum código aqui } } ?> Muito bem. retornando o resultado. Abaixo está o código completo da classe (mas não se preocupe. métodos e propriedades. Essa classe deverá fazer algumas coisas: Conectar ao servidor MySQL e selecionar o banco de dados desejado. vamos à prática..0 (21/04/2009) */ /* .0 (21/04/2009) */ class TutoDB { /* * Classe para interação com banco de dados * @author Everton da Rosa (Everton3x) * @version 1. Criando uma classe Agora é o momento de colocarmos em prática os conceitos de classe. Retornar a string SQL usada na consulta. abaixo do código vamos explicá-lo passo a passo): <?php /* * Script para estudo sobre PHP e Orientação a Objetos * @author Everton da Rosa (Everton3x) * @copyright GPL * @version 1. agora que sabemos estes três conceitos. vamos fazer uma classe. Para isso vamos construir uma classe de interação com o MySQL.// . ou seja. e ver como tudo funciona. Executar consultas ao banco de dados. com seus métodos e variáveis. Configurar as variáveis (propriedades) dinamicamente..

$this->user. if ($sel) { return true.* Declaração das variáveis (propriedades) da classe */ private $host. } else { return false. // Host (Servidor) que executa o banco de dados private $user. $this->pass) or die($this->erro(mysql_error())). // Nome do banco de dados a ser utilizado private $sql. // Usuário que se conecta ao servidor de banco de dados private $pass. return $con. } /* * Função para seleção 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())). } } /* * Função para execução da consulta ao banco de dados * @author Everton da Rosa (Everton3x) * @return Object $qry Retorna o resultado da consulta como um objeto */ function query() . // Senha do usuário para conexão ao banco de dados private $db. // String da consulta SQL a ser executada /* * Função para conexão ao banco de dados * @author Everton da Rosa (Everton3x) * @return Object Retorna o objeto da conexão */ function conectar() { $con = mysql_connect($this->host.

} /* * Função para atribuir valores às propriedades da classe * @author Everton da Rosa (Everton3x) * @param String $prop Nome da propriedade que terá seu valor atribuído * @param String. . $value) { $this->$prop = $value. Array.{ $qry = mysql_query($this->sql) or die ($this>erro(mysql_error())). indicamos a classe com a palavra-chave class e damos um nome a ela (TutoDB). return $qry. } } ?> Inicialmente. Object Valor a ser atribuído * @return void Não dá nenhum retorno */ function set($prop. } /* * Função para retornar a string SQL * @author Everton da Rosa (Everton3x) * @return String String SQL */ function getSQL() { return $this->sql. } /* * Função para exibir os error * @author Everton da Rosa (Everton3x) * @param String $erro Erro a ser exibido * @return void Não dá nenhum retorno */ function erro($erro) { echo $erro.

// Nome do banco de dados a ser utilizado $sql. iniciaremos com os códigos do nossos métodos. É importante salientar que não serão explicados o que cada método faz. $pass. // Senha do usuário para conexão ao banco de dados $db. set() é o método que atribui os valores ás nossas propriedades. Utilizando a classe Agora que temos a nossa classe pronta.class TutoDB { Em seguida. que nada mais são do que variáveis que podem ou não receber valores desde já. vamos ver o que ela faz e entender um pouco mais sobre métodos e propriedades e a interação entre eles. /* * Declaração das variáveis (propriedades) da classe */ $host. $user. por exemplo. além da string de consulta SQL ($host. a senha e o banco de dados. As propriedades que foram definidas servem para armazenar o host MySQL. selecionarDB() serve para selecionar o banco de dados desejado. // Usuário que se conecta ao servidor de banco de dados $pass. Caso quiséssemos atribuir-lhes valor. o usuário. No nosso casso. apenas definiremos as variáveis. Depois disso. faríamos $host = 'localhost'. definiremos as propriedades da classe. Na próxima parte do artigo veremos como utilizar esta classe e aprenderemos mais sobre a interação entre propriedades e métodos. getSQL() retorna a String SQL atribuída à propriedade $sql. geralmente baseados nas propriedades. pois isso fugiria do escopo do artigo. query() executa a consulta ao banco de dados. // String da consulta SQL a ser executada Aqueles que já trabalham com classes sentirão falta das palavras public. este é um artigo básico. A questão sobre visibilidade fica para um próximo. // Host (Servidor) que executa o banco de dados $user. O importante é que se entenda que propriedades são objetos que são armazenados dentro da classe e que são utilizados geralmente pelos métodos e que métodos são partes da classe que fazem alguma coisa. Temos seis métodos na nossa classe: conectar() serve para estabelecer uma conexão ao servidor MySQL (o host). erro() exibe mensagens de erro. $db e $sql. Como disse inicialmente. . respectivamente). private ou protected.

ou seja. Object Valor a ser atribuído * @return void Não dá nenhum retorno . Com isso estamos dizendo ao PHP para armazenar na variável $obj uma nova instância da classe TutoDB. Argumentos são os valores passados entre os parênteses das funções ou métodos. Se deixássemos para atribuir valores em $user da forma $obj->user.''). Array. podemos. criar um objeto na memória que irá representar a classe TutoDB. set()).'select * from COLLATIONS').'root'). colocar um código que verifique se o valor passado para ser armazenado na propriedade $user seja apenas root ou admin. $obj->set('pass'. dentro do método. Vamos aproveitar e ver o método set(): /* * Função para atribuir valores às propriedades da classe * @author Everton da Rosa (Everton3x) * @param String $prop Nome da propriedade que terá seu valor atribuído * @param String. Por que então utilizamos um método para fazer isso? Vamos supor que quiséssemos que a propriedade $user armazene apenas os valores 'root' ou 'admin'. $obj->set('sql'.'information_schema'). qualquer valor poderia ser atribuído. estamos dizendo para que seja colocado o valor information_schema na propriedade $db. mas atribuindo diretamente um valor para a propriedade assim: $obj->db = 'information_schema'.'localhost'). Depois vamos atribuir valores às nossas propriedades da seguinte forma: $obj->set('db'. $obj->set('host'. Poderíamos fazer isso de outra forma. $obj->set('user'. Com isso dizemos ao PHP para utilizar o método set() do objeto armazenado em $obj (a classe TutoDB) para atribuir à propriedade passada pelo primeiro argumento o valor do segundo argumento. sem utilizar um método.Primeiramente devemos instanciar a classe. mas se utilizamos um método para isso (no nosso caso. Isso nós conseguimos da seguinte maneira: $obj = new TutoDB. No caso da primeira linha.

// Seleciona o banco de dados . Note também que o que o método faz é apenas $this->nomedapropriedade = valor a ser atribuído. ou se der erro. // Realiza a conexão /* * Função para conexão ao banco de dados * @author Everton da Rosa (Everton3x) * @return Object Retorna o objeto da conexão */ function conectar() { $con = mysql_connect($this->host. para o script e chama o método erro() massando-lhe o parâmetro mysql_error() ( or die($this>erro(mysql_error()))) Depois disso selecionamos o banco de dados desejado (que foi informado na propriedade $db): $obj->selecionarDB(). que poderia estar até mesmo fora da nossa classe. Seguindo.. $this->user. $this->pass) or die($this->erro(mysql_error())). Precisamos fazer referência à classe pois se colocássemos apenas $prop = $value. return $con.. $value) { $this->$prop = $value. estaríamos dizendo ao PHP para atribuir $value a uma variável chamada $prop.$this->user. $user e $pass para conectar ao servidor MySQL (mysql_connect($this->host. } Vejam que o método pega os valores das propriedades $host. } Veja que a atribuição de valor à propriedade é feita no seguinte esquema: $this->$prop = $value.*/ function set($prop. Vamos conectar com o servidor MySQL com o método conectar() da seguinte forma: $obj->conectar(). Onde: $this referencia a própria classe. $this->pass)).

// Exibe o número de linhas do resultado . // Exibe o número de linhas do resultado Se tudo funcionar. Por fim.'localhost'). // Seleciona o banco de dados $rs = $obj->query().$sql. Todos os três métodos seguem um mesmo padrão: usam os valores armazenados nas propriedades para realizar alguma coisa.Em seguida realizamos a consulta ao banco de dados: $rs = $obj->query().''). $obj->set('user'. no navegador deve aparecer uma mensagem do tipo: O número de linhas encontrado para a consulta select * from COLLATIONS é de 127 Agora temos o código completo para usarmos nossa classe: /* * Testando a classe */ $obj = new TutoDB. // Pega o valor da propriedade $sql echo 'O número de linhas encontrado para a consulta '.mysql_num_rows($rs). $obj->set('host'.' é de '. // Instanciando a classe // Atribuindo valores às propriedades da classe $obj->set('db'. Poderíamos fazer isso também da seguinte forma: $obj->sql. $sql = $obj->getSQL(). // Pega o valor da propriedade $sql Observe que o método getSQL() apenas retorna o valor armazenado na propriedade $sql.$sql.'root'). $obj->conectar(). Ainda falta pegarmos a string SQL com o seguinte código: $sql = $obj->getSQL(). vamos escrever algo para mostrar que nossa classe funciona: echo 'O número de linhas encontrado para a consulta '.'select * from COLLATIONS').' é de '.mysql_num_rows($rs). $obj->set('sql'. // Realiza a conexão $obj->selecionarDB(). $obj->set('pass'.'information_schema').

item básico para a compreensão do que é programação orientada a objetos no PHP. fazemos o seguinte: $variavel->nome_da_propriedade. Comentário . Métodos são funções internas das classes que realizam alguma coisa. Propriedades são variáveis internas da classe que servem para armazenar dados que serão utilizados por métodos. vamos na conclusão abordar os principais conceitos do artigo. Para executar um método. principalmente o iniciante. Para atribuir diretamente dados às propriedades fazemos: $variavel->nome_da_propriedade = dados a serem atribuídos. geralmente tomando por base os dados armazenados nas propriedades. Isso se faz da seguinte forma: $variavel = new NomeDaClasse. propriedades e métodos. Resumo final Para finalizar o artigo. Espero que o leitor. fazemos o seguinte: $variavel->metodo(). Para "ver" o que está armazenado na propriedade. as propriedades e outros métodos internos da classe são referenciados utilizando $this: $this->nome_da_propriedade. $this->nomeDoMetodo(). tenha aprendido um pouco mais sobre classes. geralmente tratando de operações relacionadas (banco de dados.Agora que sabemos o básico cobre classes. Dentro dos métodos. faremos um apanhados dos principais conceitos nele abordados: Classes são blocos de código. arquivos etc) e que devem ser instanciadas (colocadas na memória) para serem usadas.