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

O objetivo deste artigo é ensinar os conceitos principais e fundamentais da Orientação a Objetos do PHP para aquelas pessoas que estão iniciando na linguagem ou para aqueles que têm encontrado dificuldades para entender outros artigos. Este artigo tratará de classes, métodos, propriedades e, além disso, dará uma breve explanação sobre o que é PHP-OO.

[ Hits: 73.445 ]

Por: EVERTON DA ROSA em 29/04/2009 | Blog: http://everton3x.github.io


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, agora que sabemos estes três conceitos, vamos à prática, ou seja, vamos fazer uma classe, com seus métodos e variáveis, e ver como tudo funciona.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Criando uma classe
   3. Utilizando a classe
   4. Resumo final
Outros artigos deste autor

Relatórios com PHP e XSLT - Conceitos iniciais e utilização básica

ExtJS: Um excelente framework de JavaScript

Utilizando PHP para validar dados passados pelo usuário

Utilizando endereços personalizados no seu servidor web: passo-a-passo

Qual o valor de seu trabalho

Leitura recomendada

Construindo um ToolBar com botões no PHP-GTK

Introdução ao PHP-GTK

Ato 3 - Estrutura de Controle e Funções

Ato 2 - comandos de saída, constantes e operadores em PHP (básico)

Sistema de Gerenciamento de Conteúdo

  
Comentários
[1] Comentário enviado por giaco em 29/04/2009 - 08:10h

Parabéns pelo artigo!
Suas explicações foram claras e objetivas. Acho que muita gente programa em PHP sem usar OO...

[2] Comentário enviado por reideer em 29/04/2009 - 08:48h

Parabéns pela iniciativa.
Existem algumas falhas, mas como tem caráter introdutorio acho que não convém descrevê-las.

O povo que programa PHP é numeroso. porém apenas uma pequena porcentagem admite que programar PHP-OO é mais produtivo, rápido, seguro, legível, agradável.....

Temos que nos unir (programadores PHP-OO), para introduzirmos uma nova mentalidade nos programadores php spartanos.
Quem nunca pegou um script simples e teve vontade de se matar? Eu mesmo peguei um trabalho de um colega aqui na empresa e precisei refaze-lo, pois era impossível compreender as idas e vindas.
Os malditos include("cabeçalho.php"); include("menu1.php); e as variáveis e funções que ninguém sabe direito o que fazem e de onde é quem vem.
Quando temos um sistema Orientado a Objetos fica muito mais simples encontrar métodos(funções) e seus significados. Também fica muito mais seguro por não termos variáveis perdidas no meio do sistema.

[3] Comentário enviado por phpricardo em 29/04/2009 - 09:25h

Meu irmãozinho que artigo maravilhosooo!!!

Não entendia bem OO até não sou muito avançado no php, mas sempre importei com a vontade de aprender OO e esse artigo ta magnifico!! parabéns mesmo! ;)

[4] Comentário enviado por joaomc em 29/04/2009 - 09:28h

É muito importante lembrar ao leitor que só PHP5 ou superior têm suporte a OO. No PHP4, as classes não são classes de verdade, mas variáveis.

[5] Comentário enviado por joaomc em 29/04/2009 - 09:30h

Lembrem que PHP4 não tem suporte verdadeiro a OO.

[6] Comentário enviado por Reideer em 29/04/2009 - 09:44h

Lembrar também que ninguém mais deve utilizar PHP4.
Pois:
Não tem mais suporte.
É defasado.
Está saindo a versão 6 do PHP, que não suportará inúmeras funções do PHP4

[7] Comentário enviado por luizvieira em 29/04/2009 - 09:59h

Show!

[8] Comentário enviado por everton3x em 29/04/2009 - 17:27h

Caro reideer:

A respeito do que escreveste sobre as falhas do artigo , gostaria muito que apontasse quais são pelos seguintes motivos:
1. Sou iniciante em PHP-OO e, justamente por sentir falta de artigos que falassem uma linguagem simples sobre o tema é que escrevi este. Estou planejando uma continuação deste falando sobre visibilidade e herança e, por isso, acho importante que apontes minhas falhas para poder aprender e não cometê-las nnos próximos artigos.
2. Também é importante apontares as falhas do artigo para que aqueles iniciantes que o lerem corrigam no seu aprendizado aquilo que está falho..

Agradeço a todos os comentários que só me incentivam a continuar escrevendo.

[9] Comentário enviado por joaomc em 29/04/2009 - 21:21h

Tenho algumas opiniões a respeito do artigo, mais especificamente sobre o método set. Não concordo com o uso do método 'set' para modificar as propriedades. Há vários problemas nessa abordagem:
- TODA a lógica de verificação e validação do acesso a propriedades fica dentro de um método só. Em pouco isso, isso vira uma salada difícil de manter, especialmente se a classe contiver dezenas de propriedades (o não é tão difícil).
- A leitura do código fica muito prejudicada. Getters e Setters podem ser chatos, mas pode ser muito mais fácil encontrar o método setter do que procurar tudo dentro de um "metodão" set.
- Um bom IDE consegue detectar o acesso a um método inexistente, acesso a um membro inexistente, mas não consegue detectar o mau uso desse método 'set'.



[10] Comentário enviado por everton3x em 30/04/2009 - 11:48h

Caro joaomc:

A respeito de seu comentário sobre o "métodão" set, concordo com sua exposição. Talvez eu devesse ter utilizado um método set diferente para cada propriedade ou até mesmo deixar a parte sobre atribuir dados às propriedades da forma convencional ($this-propriedade = valor).

No caso do artigo, utilizei o método set para demonstrar que é possivel atribuir dados às propriedades desta forma. Talvez devesse ter colocado que existem outras formas alé desta e da convencional.

Mas como disse no artigo e repito: é um artigo introdutório voltado para iniciantes (ou para quem ainda nem começou). Não é intensão discutir se esta ou aquela é a melhor forma, mas sim mostrar os CONCEITOS de objeto, classe, método e propriedade.

Mas como disse no início, respeito e concordo com seu comentário que, con certeza, servirá como aprendizado para o próximo artigo que deverá tratar de visibilidade, herança e extensão de classes.

[11] Comentário enviado por marcusnunes em 01/05/2009 - 15:28h

Ótimo artigo para iniciantes. :)

[12] Comentário enviado por reideer em 02/05/2009 - 14:26h

Boa tarde.
A pedido do Everton3x vou comentar 2 erros aparentes.
O primeiro diz respeito a boas práticas de Programação. Não declarou métodos Construtores, que na padronização do PHP 5 seriam feitos como __construct(){} e __destruct(){}. Embora não estejam efetuando nenhuma função, é importante ter estes por visibilidade.

Outra coisa é quanto aos métodos set, pois da forma que está esta destruindo o conceito de encapsulamento.

Caso eu tenha

class xxx{
private intocavelExternamente;
public dois;
}

com a utilização deste método set, eu poderei alterar os valores do atributo um publicamente mesmo que eu não deseje isto.
Acho que o ideal a se fazer quando se trabalha com este tipo de método set genérico é:

...
private $atributosSet = array();

public set($atributo, $valor){
$this->array[$atributosSet] = $valor;
}

e para recuperar pode utilizar

public getUM(){
return $this->atributosSet["um"];
}

...

desta forma não ocorrerá o seguinte:

class xxx{
private intocavelExternamente;
private dois;
public set($atributo, $valor){
$this->$atributo = $valor;
}

}

$xxx= new class xxx();
$xxx->set("dois","dois");
$xxx->set('intocavelExternamente',"quebrei a segurança da classe");

Espero que comente equivocos meu.
Até mais.

[13] Comentário enviado por everton3x em 02/05/2009 - 18:53h

Sobre o comentário do reideer:
Agradeço a ele por apontar as falhas que entendeu ter o artigo e posso dizer que, dentro dos meus conhecimentos restritos que tenho sobre o tema, concordo com todas, principalmente com respeito ao método set, o qual já comentei anteriormente.

Contudo, reforço que o objetivo do artigo foi apresentar conceitos de objeto, classe, métodos e propriedades de uma forma que um iniciante possa entender facilmente, sem me preocupar com boas práticas de programação, como o que é certo ou errado. Não que tais assuntos não sejam importantes, muito pelo contrário. Mas o objetivo foi fazer algo de fácil entendimento voltado para iniciantes e creio que isso foi alcançado.

De toda essa discussão, creio que fica o convite a todos que possuem conhecimento sobre os assuntos que deixaram de ser aborados no artigo (como boas práticas de programação), escreverem sobre isso, principalmente textos voltados para iniciantes.

Um grande abraço a todos.

P.S.: Pretendo em breve abordar visibilidade, herença e extensão de classes, voltado para iniciantes.

[14] Comentário enviado por removido em 03/05/2009 - 10:40h

Não gostaria de causar flames, porém desde quando;

$obj->set('db','information_schema');
$obj->set('host','localhost');
$obj->set('user','root');
$obj->set('pass','');
$obj->set('sql','select * from COLLATIONS');

é OO?

Cada método tem o seu objetivo, estes ai fazem tudo. Certo seria separar os métodos, e colocar os argumentos fundamentais para o funcionamento da classe no construtor dela.
Fica a dica para quem está começando com orientação a objeto, seja em qualquer linguagem.

Abraços e sucesso.

[15] Comentário enviado por everton3x em 03/05/2009 - 17:08h

A respeito do comentário do lfamorim:

Realmente, o método set() não tem nada de OO (equívoco meu).

A respeito dos métodos __construct() e __destruct(), não fiz referência a eles pois pretendo abordar o tema posteriormente. Como diria Jack, vamos por partes.

Ainda sobre set(), aconselho lfamorim a ler os comentários anteriores, caso já não o tenha feito.

[16] Comentário enviado por joaomc em 04/05/2009 - 09:54h

Everton, vou dar mais umas dicas para o próximo artigo:
- Utilize um exemplo real de classe. Eu começaria com "Cliente".
- Com a classe Cliente, você poderia mostrar como fazer um construtor com argumentos, para inicializar um cliente já com algumas propriedades definidas.
- Depois, poderia mostrar que pode fazer uma validação do CPF do cliente no setter de CPF, e como colocar automaticamente o nome do cliente em maiúsculas no setter do NOME. Pode criar um getter getNomeCompleto, que retorna o nome e o sobrenome.
- O destrutor da classe pode ser usado para fechar automaticamente a conexão com banco de dados, por exemplo.
- No método salvar(), você poderia fazer outras validações.

[17] Comentário enviado por everton3x em 04/05/2009 - 11:41h

Caro joaomc:
Obrigado pelas dicas, vou analisá-las com cuidado, porém, uma coisa é certa: não pretendo cometer os mesmos equívocos sobre o método set() que cometi neste artigo. Afinal, errar uma vez é humano; duas vezes é burrice mesmo!

[18] Comentário enviado por phpoo em 01/06/2015 - 13:06h

Muito bom esse artigo! Recomendo para quem deseja continuar os estudos com PHP Orientado a objetos o curso Work Series: Tem vídeo aulas gratuitas disponíveis nesse link: http://vconectado.com/PHPOO/
abraços ;)


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts