Tutorial de POO no PHP: Classes e Objetos


Autor/fonte: Bruno Viana
Tags: [ tutorial poo ]




Para que um objeto seja criado é necessário definirmos sua estrutura. A estrutura de um objeto são todas as suas características e possíveis ações que também são baseadas na vida real. Por exemplo, um carro possui como características: Cor, ano, modelo, marca, etc, e possui como ações: andar, parar, dar ré, ligar e desligar.

1. Classe

Para definirmos essa estrutura criamos algo que chamamos de Classe. Ela é a estrutura fundamental para a criação de objetos. É como se fosse um template para os objetos, onde todas as suas características e ações são especificadas e com isso ser possível criar N objetos diferentes. Diferente no sentido de dados e informações armazenadas, mas sua estrutura (definida na classe) é sempre igual.

Dentro de uma classe todas as suas características são chamadas de propriedades, enquanto suas ações são chamadas de métodos.

Para se definir uma classe é preciso básicamente utilizar a seguinte estrutura:

<?php
class Produto
{
	// propriedades
	public $codigo;

	public $nome;

	public $preco;

	// métodos
	public function calculaDezporcento()
	{
		return $this->preco * 0.10;
	}
}
?>

Note que dentro de uma classe as propriedades são como variáveis e os métodos são como funções. A palavra chave public é utilizada para definir o tipo de acesso das propriedades e dos métodos (Veja o capitulo 5, Encapsulamento).

Usamos também a palavra chave $this, que serve para dentro de um método chamar uma propriedade da classe.

Para acessarmos as propriedades e os métodos dessa classe é simples. É só seguir o exemplo:

<?php
$produto = new Produto();
$produto->preco = 1200;
echo $produto->calculaDezPorcento(); // imprime 120
?>

2. Objeto

Uma vez que a classe é definida podemos então criar infinitos objetos baseados na estrutura de uma mesma classe. Dentro da nossa aplicação podemos ter 100 objetos Produto que possuem a mesma estrutura, mas com informações diferentes.

A criação de um objeto a partir de uma classe é chamada de instanciação, então todo objeto é uma instancia de alguma classe. Para criar um objeto utilizamos o operador new.

<?php
$produto = new Produto();
$produto2 = new Produto();
$produto3 = new Produto();
?>

Isso informa ao interpretador do PHP que um novo objeto está sendo criado. Então internamente o PHP reserva um espaço na memória onde aquele objeto vai ser armazenado. Por causa disso quando trabalhamos com objetos (a partir do PHP 5) todos os valores são passados por referencia, ou seja:

<?php
$produto = new Produto();
$produto->preco = 1;

echo $produto->preco; // imprime 1

$produto_copia = $produto;
$produto_copia->preco = 3;

echo $produto->preco; // imprime 3
?>

Explicando todo o processo por trás: quando instanciamos a classe Produto dentro da variável $produto, é criado um espaço na memória onde o objeto fica armazenado e a variável $produto guarda a referência para aquele espaço, ou seja a variável aponta diretamente para a memória. Quando dizemos que $produto_copia é igual a $produto, $produto_copia irá copiar a referência para a memória e não o objeto. Assim qualquer alteração feita em $produto_copia afetará $produto, pois ambos apontam para o mesmo objeto na memória.

É possível que seu navegador não suporte a exibição desta imagem.

3. Construtores e destruidores

Em certos momentos precisamos executar algo no momento em que uma classe é instanciada. Às vezes é necessário setar valores padrões a algumas propriedades, realizar cálculos, etc.

Para isso existe o método construtor, que no PHP é chamado através da palavra chave __construct. Toda vida que uma classe é instanciada o PHP busca pelo método __construct e o chama caso seja encontrado. O método construtor não é obrigatório, por tanto sua classe instanciará normalmente se você não declará-lo.

Ao instanciar classes é possível passar para ela parâmetros. Esses parametros são repassados para o construtor. Veja o exemplo:

<?php
class Produto
{
	public $codigo;

	public $nome;

	public $quantidade;

	/**
           * Construtor
           */
	public function __construct( $codigo, $nome, $quantidade )
	{
		$this->codigo = $codigo;
		$this->nome = $nome;
		$this->quantidade = $quantidade;
	}
}

$produto1 = new Produto( 1, "CD Nine Inch Nails – With Teeth", 4 );
$produto2 = new Produto( 2, "CD A Perfect Circle – Mer De Noms", 3 );
?>

Também temos os destrutores que no PHP são chamados através da palavra chave __destruct. Ao contrario dos construtores, os destrutores são chamados quando um objeto é destruído, por exemplo:

<?php
class MinhaClasse
{
	public function __destruct()
	{
		trigger_error( 'Por favor, não me destrua!!!!' );
	}
}

$objetoMinhaClasse = new MinhaClasse();

unset( $objetoMinhaClasse ); // dispara o erro
?>




Rec6 Digg del.icio.us

Enviado por xKuRt em 03/02/2009 às 08:35


Itens relacionados

Tutorial de POO no PHP: Encapsulamento
Tutorial de POO no PHP: Membros da classe
Tutorial de POO no PHP: Abstração
Tutorial de POO no PHP: Tratamento de erros
Tutorial de POO no PHP: Herança e polimorfismo
Tutorial de POO no PHP: Programação Estruturada x Programação Orientada a Objetos
Tutorial de POO no PHP: Intercepções
Tutorial de POO no PHP: Padrões de projetos

Avaliação

Avaliação desta publicação: 10.00; Total de avaliações: 2


Avaliar:


A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.



Comentários

AvatarEnviado por BMCVET em 07/11/2009 às 12:10

Muito Bom Tuturial Parabens !!!

--
BMCVET

AvatarEnviado por Stark em 08/04/2009 às 21:48

Olá Eder,

O resultado é bem 3. Porém imprime previamente 1.

Isto é, temos

<?php
echo $produto->preco=1;
echo $produto_copia=3;
?>

o que nos imprime : 13
1 do primeiro echo.
3 do segundo echo.

Para demonstrar que a variável $produto_copia, não aponta para um novo objeto Produto mas para o mesmo objeto Produto que a variável $produto aponta!

Para realizar copias temos de definir um método na classe Produto que devolva uma nova instãncia de si própria!

Abraço.

--
W.B.

AvatarEnviado por ederdesouza em 06/04/2009 às 06:53

Bom dia!
Belo tutorial, está muito bem explicado.

Mas eu fiz um teste neste trecho de código e imprimiu 13 e não como você havia dito, que no caso seria 3.

<?php
$produto = new Produto();
$produto->preco = 1;

echo $produto->preco; // imprime 1

$produto_copia = $produto;
$produto_copia->preco = 3;

echo $produto->preco; // imprime 3
?>

O que aconteceu? foi uma concatenação?
abraços.

--
Eder Araújo de Souza


Envio de comentário:




  

Quinta, 02 de Setembro de 2010


Top 5 membros

Últimos membros online

Últimos membros cadastrados