PHP Orientado a Objeto
Desde que escrevi esse artigo, aprendi muito sobre programação orientada a objetos. Sugiro que não use esse post como referência. Se desejar, “JavaScript Orientado a Objetos” é uma fonte mais correta e atualizada sobre POO.
Eu sei que PHP é um tanto fora do contexto do blog, mas pra quem tiver a fim, fica aí a dica. E os conceitos servem também pra JavaScript Orientado a Objeto.
Que diabos é Programação Orientada a Objeto?
A Orientação a Objetos é uma maneira de programar que modela os processos de programação de uma maneira próxima a realidade, tratando cada componente de uma aplicação (script) como um objeto, com suas características e funcionalidades.
Nada impede que se programe dessa maneira na versão 4 do PHP, mas a versão 5 reescreveu o tratamento de objetos, permitindo mais recursos, performance e vantagens no uso deste tipo de programação.
Classes e Objetos
Classe é a estrutura fundamental para a criação de um objeto. Uma classe é um conjunto organizado de variáveis (propriedades ou atributos) e métodos (funções), que será utilizada como um novo tipo e instanciará um objeto. Uma classe tem por objetivo criar um objeto, que é uma representação desta classe em uma variável.
Vamos utilizar a seguinte classe:
<?php
// Classe dog
class dog {
public $nome;
public $humor;
function setNome( $nome )
{
$this->nome = $nome;
}
function setHumor( $humor )
{
$this->humor = $humor;
}
function falar()
{
echo $this->nome . ' está ' . $this->humor . ' e disse: AUAU!';
}
}
?>
Aí criamos uma classe que instanciará um objeto, no nosso caso, um cachorro. Ela tem duas propriedades ($nome e $humor), e três métodos (setNome($nome), setHumor($humor) e falar()). Agora, criando um objeto a partir dessa classe, vamos ver o que podemos fazer com ela:
$cachorro = new dog; // Instanciamos o objeto "cachorro"
$cachorro->setNome( "Rex" ); // Setamos $cachorro->nome;
$cachorro->setHumor( "feliz" ); // Setamos $cachorro->humor;
$cachorro->falar(); // Chamamos o método $cachorro->falar();
Como você deve ter visto, instanciamos um objeto utilizando o operador new. Para utilizarmos as propriedades e métodos da classe, devemos utilizar o operador ->, como vimos acima.
A variável $this
Na definição da classe, podemos usar a variável $this, que é o próprio objeto. Quando uma classe é instanciada em um objeto, e utilizamos a variável $this, essa variável se refere ao objeto que estamos utilizando.
Herança
Herança é uma forma de reutilização de código em que novas classes são criadas a partir de classes já existentes, herdando atributos e métodos, e incluindo outros que sejam de necessidade. Vamos extender nossa classe dog, suportando também raças.
class raca extends dog
{
public $raca;
function setRaca( $raca )
{
$this->raca = $raca;
}
function falar()
{
echo $this->nome . ' é da raça ' . $this->raca . ' e disse: AUAU!';
}
}
A classe raca, acima, herdou todas as propriedades e métodos da sua classe pai, dog. Além disso, foi adicionado um método setRaca($raca), e o método falar() foi modificado. Usando sub-classes, é possível redefinir métodos e propriedades, e acrescentar outros, dependendo das necessidades.
Espero que tenha dado uma boa base. Logo entraremos em JavaScript também…







Tenho me dedicado mais ao estudo de linguagens de programação, especialmente PHP e Javascript e devo te agradecer pelos ótimos posts. ;)
Gostaria que me tirasse uma dúvida:
Existem variáveis de escopo global e local. Sobre isso eu já estou por dentro.
Mas a respeito do conceito de público e privado, veja se entendi bem: Uma propriedade pública é equivalente a uma variável global e uma propriedade privada é equivalente a uma variável local, porém propriedades referem-se ao contexto da classe onde foram declaradas, certo?
Jader,
Métodos públicos podem ser acessados diretamente por classes ou usuários externos ao módulo.
Já os com propridade privada são de uso exclusivo da classe em questão.
Forte abraço!
Eu juro que tento, tento, me esforço, mas não entra na minha cabeça essa história de orientação a objetos.
Cara, é muito estranho mesmo! Mas vou continuar tentando e tentando aqui. Abraço.
“Existem variáveis de escopo global e local. Sobre isso eu já estou por dentro.
Mas a respeito do conceito de público e privado, veja se entendi bem: Uma propriedade pública é equivalente a uma variável global e uma propriedade privada é equivalente a uma variável local, porém propriedades referem-se ao contexto da classe onde foram declaradas, certo?”
na verdade Jader, em OO variáveis globais equivalem aos atributos de uma classe, e veriáveis locais são as variáveis que fazer parte dos métodos da classe(que equivalem às funções). Private, protected e public são definições de acesso para visibilidade fora da classe, ou seja, você vai usa-los quando estiver fora da classe onde estas foram criadas.
To comentando atrasado :P…
Muito interessante este post, me deu uma clareada nas idéias a respeito de OO (que pra mim é um bicho de 7 cabeças) :)
Abraços
Linguagens orientadas a objeto é a oitava maravilha do mundo, depois que você passa a enteder elas, fica impossível não querer usar mais a metodologia !
@Wryel: é verdade, hoje já fica difícil trabalhar com sistemas exclusivamente estruturados. E quando se implementa MVC então, muuuuuito melhor.
Há um erro na construção desse exemplo. É fácil saber qual é o erro.
Basta fazer a pergunta: “O cachorro pertençe a uma raça ou é a raça que pertence a um cachorro?”
Leia um bom livro de UML, que você terá mais facilidade para entender os conceitos de orientação a objeto.
@Diogo: desenterrando o post… Agora vejo o erro claramente… Já fazem quase dois anos, e amadureci bastante nesse tempo. Mas obrigado por lembrar.
me ajudou aclarear o conceito de OO.
obrigado!
Interessante, mas ainda estou acostumado com programação estruturada, que parece ser mais “suja”, o caso é que me ensinaram assim, até sei usar POO mas ainda não me senti tão confortável quanto o velho método estruturado.
Falou.
cara.. vlw ae..
consegui entende…
mto fera isso ae..
flw
Maninho, como o nosso amigo Barili citou: “CONSEGUI ENTENDER” … e pasme: a 7 anos em programação e eu nunca vi a necessidade REAL de usar OO… Fogo neh? O Java ajuda bastante para pegar esses esquemas. Mas a minha linguagem de coração vai ser sempre o bom e velho PHP… hehehe … ABRAÇOS !!!!!
Júlio,
no spaghetti é utilizado muito o $this->Contacts->findAll()
eu queria saber o seguinte:
o Contacts nesse caso é o model, correto?
findAll() é uma função dentro do model contacts?
Como funciona essa questão de fazer varias referencias
$this->nome->outronome
Da uma explicada sobre isso. Please!!
Julio…
So uma ideia,
Que tal um Code Syntax Highlighting?
=)
Bacana, vai ser muito utiu, bem encontrei um link bem legal interessante para quem esta aprendendo php orientado, segue link:
http://www.youtube.com/watch?v=fjqzRz6ClOQ
Otimo post!
POoooooooo… li 300 tutoriais e nao tinha entendido
tava estudando por uma apostila mas tbm nao consegui entender essa budega!!
haha
valeu pelo post.
só consegui entender aki
um ABRAÇO!