quarta-feira, 22 de outubro de 2008

PHP: Um Carrinho de Compras :)

Bom dia leitores ( eles existem nesse blog? :P )

Hoje vou postar um código que desenvolvi que simula um carrinho de compras em PHP. Você deve estar se perguntado: "Mas por que escrever código para algo tão comum, que é encontrado facilmente na Internet?" Simples: Para treinar Programação Orientada a Objetos :)

Se servir para alguém, faça bom proveito! Se você quiser sugerir alguma mudança no script, pode ficar a vontade. Ainda estou aprendendo POO.

Vamos lá!

Classe Produto - Representa um produto do carrinho de compras

/*
Classe: Produto
Descrição: Representa um produto
21/10/2008
Willian Gustavo Veiga
*/

class Produto {
/*
Atributos do produto. Todo produto tem um código,
nome, descrição e valor.
*/
private $codigo;
private $nome;
private $descricao;
private $valor;

/*
Classe construtora. Toda vez que for criada uma instância
esta classe será chamada, atribuindo os valores passados aos seus
atributos.
*/
public function __construct($codigo, $nome, $descricao, $valor) {
$this->codigo = $codigo;
$this->nome = $nome;
$this->descricao = $descricao;
$this->valor = $valor;
}

public function get_codigo() {
return $this->codigo;
}

public function get_nome() {
return $this->nome;
}

public function get_descricao() {
return $this->descricao;
}

public function get_valor() {
return $this->valor;
}
}
?>


Classe Carrinho - Representa o carrinho de compras

/*
Classe: Carrinho
Descrição: Representa um carrinho de compras
21/10/2008
Willian Gustavo Veiga
*/

class Carrinho {
/*
Atributo do carrinho. Todo carrinho poderá ter
0 ou muitos produtos.
*/
private $produtos;

/* Adiciona produtos no carrinho de compras */
public function adicionar(Produto $produto) {
$this->produtos[] = $produto;
}

/*
Remove produtos do carrinho de compras.
Percorre todos os produtos do carrinho verificando
se o código do produto passado como parâmetro é
igual ao código de algum produto. Se ele encontrar
um produto com o código igual, remove o produto
do carrinho de compras.
*/
public function remover($codigo_produto) {
if(is_array($this->produtos)) {
foreach($this->produtos as $i => $produto) {
if($produto->get_codigo() == $codigo_produto)
unset($this->produtos[$i]);
}
}
}

/*
Lista todos os produtos presentes no carrinho
de compras até o momento.
*/
public function listar() {
if(is_array($this->produtos)) {
foreach($this->produtos as $produto) {
echo 'Código: ' . $produto->get_codigo() . '
';
echo 'Nome: ' . $produto->get_nome() . '
';
echo 'Descrição: ' . $produto->get_descricao() . '
';
echo 'Valor: R$ ' . $produto->get_valor() . '

';
}
}
}

/*
Soma o valor de todos os produtos presentes
no carrinho de compras. Exibe o total.
*/
public function total() {
if(is_array($this->produtos))
foreach($this->produtos as $produto)
$total += $produto->get_valor();

echo 'Total: R$ ' . $total;
}
}
?>


Usando as classes
// Inclui as classes no código automáticamente
function __autoload($classe) {
require_once $classe . '.class.php';
}

// Instância um novo carrinho de compras
$carrinho = new Carrinho();

/*
Cria 3 produtos. Os parâmetros são passados
para o método construtor da classe Produtos.
Este atribui os valores aos atributos.
*/
$produto1 = new Produto(1, 'Notebook', 'Notebook Acer', 2500);
$produto2 = new Produto(2, 'Boneco Tux', 'Boneco Tux apeluciado', 58.90);
$produto3 = new Produto(3, 'DVD Debian Lenny', 'DVD com o novo Debian Estável', 25.50);

// Adiciona os produtos no carrinho de compras
$carrinho->adicionar($produto1);
$carrinho->adicionar($produto2);
$carrinho->adicionar($produto3);

// Lista todos os produtos
$carrinho->listar();

// Exibe o total
$carrinho->total();

// Remove um produto do carrinho de compras
$carrinho->remover(1);

/*
Vamos listar os produtos e exibir o total
novamente. Note que o produto com código = 1
foi removido do carrinho de compras
*/
$carrinho->listar();
$carrinho->total();
?>


O código está comentado, qualquer dúvida deixe nos comentários.

Observação: Alguém sabe como disponibilizar código no Blogspot? A única maneira que encontrei foi utilizando a tag <code> do HTML mas o código perdeu a indentação original. :(
Por favor, se souber, comente!

Um abraço.

3 comentários:

Roberto Entringer disse...

Parabéns.

Fiz este pequeno ajuste para que o total fosse exibido corretamente.

// Soma o valor de todos os produtos presentes no carrinho de compras. Exibe o total.
public function total() {
if(is_array($this->produtos)) {
$total = 0;
foreach($this->produtos as $produto) {
$total += $produto->get_valor();
}
echo 'Total: R$ ' . $total;
}
}

Roberto Entringer disse...

Achei melhor publicar o comentário assim:

public function total() {
if(is_array($this->produtos)) {
$total = 0; //ADICIONEI ESTA LINHA DEPOIS USO REGISTER GLOBALS OFF
foreach($this->produtos as $produto) {
$total += $produto->get_valor();
}
echo 'Total: R$ ' . $total; //MOVI ESTA LINHA PARA FORA DO FOREACH
}
}


Fiquei maravilhado com a qualidade do código. Estou aprendendo php aos poucos, e gostaria de uma orientação de como faço para usar este código em uma situação mais realista. Se puder me dar um exemplo de uso na prática ficaria imensamente agradecido.

Linux Dummy disse...

Boa tarde Roberto Entringer, tudo bem? Espero que sim.

Obrigado por visitar e comentar no meu blog. Todo feedback é de grande valia.

Qual a sua dúvida?

Em uma situação mais real, para armazenar os produtos, você deverá usar sessões ou cookies.

Um abraço, qualquer dúvida volte a comentar, se souber a resposta, ficarei feliz em te ajudar. Até.