…
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(‘usuario.class.php’);
//instanciando o objeto usuario
$clares = new Usuario();
//setando os atributos do objeto
$clares->setNome(“Rafael Clares”);
$clares->setMail(“[email protected]“);
$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
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!
Grande 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
Parabé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!
Graças a Deus que existe gente como vc!!!
Estava procurando uma explicação simploria e com um exemplo concreto de como são as classes no PHP5 e encontrei este blog. Ta de parabens mesmo!!!
Vou olhar todas as postagens.
Eu sou um programador Delphi que está acostumado a programação procedural. (Pessimos habitos)
Espero que neste esforço para migrar pro PHP vc possa me dar aquele empurrãosinho. Valeu!!
Parabéns pelo artigo e principalmente pela didática.
Vejo milhões de pessoas explicando classes pela internet e raramente alguém explica coisas como this, return e etc.
Provavelmente deve ser pela mania(vício) de quem programa faz tempo e esquece de quem esta começando, que muitas vezes se perde nestes detalhes importantes.
Continue com este excelente trabalho.
Valeu cara muito boa sua explicação , mas desde que comecei a estudar PHP OO estou tendo problemas com o include, ja vi outra forma de include esta sua e o //include_once, eu uso o Php5.
Vc poderia me ajudar e explicar por que o erro persiste ? Este é o erro :
Fatal error: Class ‘Usuario’ not found in C:public_htmlIndex.php on line 3
Desde já agradeço qualquer ajuda ! Valeu
Rapaz, creio que tenha um erro no post em relação ao nome do arquivo de classe usuario, não sei como está seu código mas no post está (estava estou corrindo) assim:
include ‘usuarios.class.php’; // no entanto o arquivo que eu crio (no post) se chama usuario.class.php
de toda forma eu costumo usar require_once ‘foo.php’;