domingo, 23 de março de 2008

PHP 5 - Orientação de objetos



Olá pessoal depois de algum tempo volto a postar sobre de desenvolvimento, o motivo é simples a tão esperada orientação por objetos do PHP 5, o famoso PHP O.O. Você que é da área já deve ter ao menos ouvido falar ou visto em uma vaga de empregos qualquer: "ter noções de PHP O.O" - o engraçado é que a maioria do povo que fala isso é pra trabalhar com frameworks de PHP, como o Cake por exemplo, onde em minha vista ter noções de orientação de objetos não basta, pois afinal a idéia do frameworks é tornar seu trabalho mais rápido, isso não quer dizer que você tendo um nível baixo de conhecimento você vá conseguir manipula-lo de forma correta. Mas vamos ao Post...

Recentemente comecei meus estudos sobre Orientação de Objetos através do livro PHP 5 Objects, Patterns, Pratice de MATT ZANDSTRA. Bom na verdade este livro trata-se de uma abordagem mais avançada do uso de PHP Orientado a Objetos em equipe, planejamento de projetos e etc. Muito bom, recomendo sua leitura, no entanto se você e iniciante, ou sempre programou em PHP 4 sem usar classes (como foi no meu caso) terá de procurar informação na Internet sobre O.O e muitas vezes se deparará com tutoriais do tipo: "olha o código aí e se vira", bom isto funciona mas na verdade você não cria um base de conhecimento sobre o assunto ali monstrado. Por isto decidi escrever este pequeno tutorial, onde tentarei explicar um pouco sobre Orientação de Objetos.

Vamos iniciar dizendo o que são classes e por que usa-las

Classes e objetos

A melhor definição de classes é olhar elas como se fossem modelos, imagine um time de futebol, você cria um modelo de uniforme todos usam ele mas nem por isto todos são iguais, um dibla melhor, o outro marca melhor, o outro tem melhor chute e por ai vai. Vamos ilustrar isso como um modelo:

uniforme = azulchuteiras = brancasdible = Xchute = Ymarcacao = Z

Temos um modelo, todos os nossos jogadores terão o mesmo uniforme e chuteiras brancas, no entanto suas qualidades dible, chute e marcacao sao varriaveis PERTECENTES a cada jogador. Agora imagine: troque a plavra jogador por OBJETO e imagine que cada OBJETO vira especificando suas habilidades.

Imaginou? se sim você já entendeu 90% da Orientação por Objetos e também qual sua vantagem, afinal é simples: Você pode colocar seu jogador no modelo do seu time importando suas qualidades.

"OBJETO terá suas habilidades incluídas no modelo CLASSE."

Sintaxe de uma classe

Você sempre iniciará uma classe com a palavra class seguida de um nome que vocêe definir para a classe

class minhaclass {

}

Após iniciar a classe você vai declarar as varriáveis que serão usadas pela classe, incluindo as que vem de fora da classe.

class minhaclass {

var $chute;

}

As váriáveis podem ser publicas, protegidas ou privadas mais tarde veremos sobre isto, por enquanto use apenas public, desta forma ficaria assim:

class minhaclass {

public $chute;

}

As varriavéis publicas sãos as que podem ser acessadas de dentro ou de fora da classe, afinal elas são publicas

Após ter declarado as varriavéis você criará as funções da sua classe ou seja METODOS

O primeiro metodo a ser criado numa classe geralmente é o __construct usado para atribuir suas varriaveis.

class minhaclass {

public $chute;

function __construct ($chute) {

$this->chute = $chute;

}

}

Pronto agora sua varriavel está atribuida ou seja onde estiver escrito chute agora é o mesmo que $chute.

Esse $this-> que apareceu ai é uma varriavel padrão do PHP, pense nele como se fosse a varriavel $_POST só que invés de ['campo'] na frente tu coloca ->metodo.$this é o mesmo que o objeto que está chamando aquela classe ou seja $this no nosso exemplo é igual ao jogador:




$jogador->chute




sendo que chute é dinamico varia de jogador pra jogador, no final seria:




fulano->99 // 99 é o que ele teria de chute




Bom como neste primeiro exemplo a varrivel é public é só imprimir agora certo?




errado, antes de imprimir você deve iniciar o objeto, ou seja você deve agora criar o jogador:




$objeto_jogador = new minhaclass(99)




$objeto_jogador é uma varriavel qualquer, new minhaclass cria o jogador, 99 atribui 99 ao seu chute




dai a pergunta mas como 99 vai atribuir ao chute? e se tiver outra varriavel como o codigo vai saber qual que é qual?




Lembra da função mail por exemplo? como vc usa ela? mail($para, $assunto, $mensagem) não é?




Ele vai saber que 99 se refere ao chute pelo mesmo motivo que a mail sabe que o seu $para se refere ao email destinatario. Porque lá em cima vc colocou as varriaveis (parametros) nessa ordem ao constuir a função dentro da classe, lembra?




class minhaclass { public $chute; function __construct ($chute) { $this->chute = $chute; }




Agora podemos imprimir o a qualidade do jogador assim




echo "Chute".$objeto_jogador->chute.;




// $objeto_jogador->chute = objeto>metodo




Enfim agora vemos como ficou: