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.000 ]

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


Resumo final



Para finalizar o artigo, faremos um apanhados dos principais conceitos nele abordados:

Classes são blocos de código, geralmente tratando de operações relacionadas (banco de dados, arquivos etc) e que devem ser instanciadas (colocadas na memória) para serem usadas. Isso se faz da seguinte forma:

$variavel = new NomeDaClasse;

Propriedades são variáveis internas da classe que servem para armazenar dados que serão utilizados por métodos.

Para atribuir diretamente dados às propriedades fazemos:

$variavel->nome_da_propriedade = dados a serem atribuídos;

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

$variavel->nome_da_propriedade;

Métodos são funções internas das classes que realizam alguma coisa, geralmente tomando por base os dados armazenados nas propriedades.

Para executar um método, fazemos o seguinte:

$variavel->metodo();

Dentro dos métodos, as propriedades e outros métodos internos da classe são referenciados utilizando $this:

$this->nome_da_propriedade;
$this->nomeDoMetodo();

Espero que o leitor, principalmente o iniciante, tenha aprendido um pouco mais sobre classes, item básico para a compreensão do que é programação orientada a objetos no PHP.

Página anterior    

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

Tratamento de exceções do PHP: uma introdução para iniciantes

ExtJS: Um excelente framework de JavaScript

PHP5 Orientado a Objetos: Visibilidade, herança e extensões de classes

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

SliTaz: Mini-review desta mini-distribuição Linux

Leitura recomendada

PRADO - PHP 5 Framework

Implementando scripts PHP com MySQL

Construindo um ToolBar com botões no PHP-GTK

MVC - Conceito e exemplo em PHP

Xoops - Um ótimo gestor de portais em PHP

  
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