…
Olá, escrevi um exemplo de classes com PHP5, como sempre muito simples, vamos ver como escrever um código de mais fácil compreensão do ser humano com orientação à objetos, mas calma lá, isso é o mínimo que se pode fazer com classes e orientação à objeto, não se confunda, isso é apenas um simples…bem simples exemplo, orientação à objetos não se resume apenas à isso. vejamos:
Sintaxe:
classes: Class NomeDaClasse{//atributos, construtor e metodos}
atributos: public/private/protected $nomeDoAtributo;
métodos: function metodoNome(){// resto do codigo}
Os métodos podem receber parâmetros e ficariam assim:
metodoNome($parametro1){ //codigo}
Toda Classe precisa de um construtor para instância-la, neste caso estamos utilizando o PHP5 que tem um método contrutor padrão, __contruct (){} e pode ser usado para todas as classes, os construtores também podem receber parâmetros, mas isso veremos em um outro exemplo, por enquanto vamos nos concentrar no básico.
A Classe usuario – usuario.class.php
<?php
Class Usuario
{
//atributos
private $nome;
private $mail;
private $telefone;
//metodo construtor vazio
function __construct(){//
}
//metodo que seta o atributo nome, recebe 1 parametro/mensagem
function setNome($nome)
{
$this->nome = $nome;
}
//metodo que seta o atributo mail, recebe 1 parametro/mensagem
function setMail($mail)
{
$this->mail = $mail;
}
//metodo que seta o atributo telefone, recebe 1 parametro/mensagem
function setTelefone($telefone)
{
$this->telefone = $telefone;
}
//metodo que retorna o atributo nome
function getNome()
{
return $this->nome;
}
//metodo que retorna o atributo mail
function getMail()
{
return $this->mail;
}
//metodo que retorna o atributo telefone
function getTelefone()
{
return $this->telefone;
}
//metodo que retorna uma frase de boas vindas
function digaOI()
{
$str = “Oi $this->nome, seja bem-vindo ao mundo dos objetos!”;
return $str;
}
} //fim da classe
?>
Vejamos o que acontece acima:
Os métodos precedem da palavra reservada Function, ou seja, function nomeDoMetodo(){ // codigo }.
Métodos podem retornar valores utilizando-se da palavra reservada Return. Mas o que acontece no retorno?
Quando esperamos um valor retornado pela funcion/metodo o valor fica atribuido (a grosso modo) no próprio método, ou seja, se temos o método function getNome(){ return $this->nome;} o valor estará contido justamente no método, queremos dizer com isso que para acessarmos/recuperarmos o valor retornado devemos acessar diretamente o método pelo seu nome, por isso quando escrevos echo getNome() o metodo nos traz seu valor retornado de acordo com que pedimos que ele retornasse, nesta caso o nome.
Os Atributos são acessado precedendo da palavra reservada $this que quer dizer “esse” ou “este“ , então quando escrevemos $this->nome estamos nos referindo a esse->nome ou seja o nome contido nesta classe ou classe a que se refere o método.
No caso do atributo $str não nos referimos à ele utilizando o $this porque $str não é um atributo da classe, ou seja, não definimos ele na classe como as demais, nome, mail e telefone, desta forma ele só existe dentro do método digaOI(), não sendo acessível através de $this->str, a classe não encontraria o atributo gerando um erro fatal.
Quando dizemos $this->nome = $nome estamos dizendo que o atributo nome da classe recebe valor do parâmetro recebido, os parâmetros não precisam ter os mesmo nomes que os atributos, isso é apenas uma questão de estética e padrão. Poderiamos fazer por exemplo algo como:
function setNome($n)
{
$this->nome = $n;
}
Isso teria o mesmo efeito que no exemplo que utilizamos.
Vejamos como instânciar um Objeto do Tipo Usuario.
O “->” é utilizado para acessarmos os atributos ou métodos da classe, seria o equivalente à classe.metodo() como no javascript, java e muitas outras linguagens de programação/script.
Criamos outro arquivo, pode ser index.php
<?
//incluido a classe Usuario no arquivo index
include(‘usuarios.class.php’);
//instanciando o objeto usuario
$clares = new Usuario();
//setando os atributos do objeto
$clares->setNome(“Rafael Clares”);
$clares->setMail(“Rafadinix@gmail.com“);
$clares->setTelefone(“11 4444-5555″);
//recuperando os valores dos atributos
echo $clares->getNome();
echo “<br>\n”;
echo $clares->getMail();
echo “<br>\n”;
echo $clares->getTelefone();
echo “<h3>\n”;
echo $clares->digaOI();
echo “</h3>\n”;
?>
Acima, utilizamos o include que como o nome já diz, inclui um arquivo dentro do arquivo atual, a grosso modo é como se estivessemos juntando os 2 arquivos, existem outros métodos de se incluir arquivos e falarei sobre eles posteriormente.
A palavra reservada NEW é utilizada para criar o novo objeto, neste caso criamos o objeto $clares e em seguida utilizamos os acessos aos métodos que setam os valores dos atributos (set…) e os métodos que retornam os valores dos atributos (get..).
Com isso acho que não fica dúvidas em relação ao exemplo, quanto ao mundo orientado à objetos, ahhh isso é outra coisa que veremos aos poucos e com muita calma, escreva, teste o exemplo acima e vá ao bom e velho google para você adentrar ao tal mundo de objetos, ah …após executar o exemplo não saia por ai achando que você programa orientado à objetos, isso ai é só um bit no universo ; ) …
$obj->mensagem(“Até a próxima!”);
Rafael Clares
3 Comentários até o momento
Deixe um comentário
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Salve,
Por causa da OO do PHP5 os atributos da classe devem ser definidas como public, private ou protected, var está depreciada. Assim como nos métodos você deve/pode colocar public, private ou protected.
Valeu!
Comment por Silas Ribas Abril 6, 2008 @ 4:13 pmGrande Silas, valeu meu velho, nessa eu vacilei mesmo …muito obrigado pelo comentário, dessa forma as pessoas que visitam esse humildissímo blog e eu podemos aprender. abs
Comment por clares Abril 6, 2008 @ 5:15 pmParabéns Rafael, muito boa sua explicação!
Estou tentando encontrar uma documentação mais rica sobre classes abstratas e suas práticas, uma boa leitura sobre classes a todos!
Comment por Newton Pasqualini Filho Setembro 1, 2009 @ 1:40 pm