Rafael Clares


Classes c/ PHP5 – Parte I
Março 11, 2008, 2:37 am
Arquivado em: PHP | Tags: , ,

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

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!

Comentário por Silas Ribas

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

Comentário por clares

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!

Comentário por Newton Pasqualini Filho




Deixe um comentário
Linhas e parágrafos quebram automaticamente, endereços de email não serão mostrados, HTML permitido: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>