Página Inicial > PHP, SPL > SPL Countable

SPL Countable

Eae pessoal!!!

Hoje venho falar de um assunto muito interessante, SPL. :P

Pra quem não conhece, a SPL, é uma biblioteca com diversas classe e interfaces para PHP, que vão desde estruturas de dados, implementações de Design patterns, Iterators, Exceptions e funções diversas.

Nesse post, falarei de uma das interfaces, a Countable que é extremamente simples, porém muito útil!

Antes de ir direto ao assunto, usarei o exemplo abaixo para demonstrar o uso da interface dentro de um contexto de e-commerce.

class Produto
{
    private $nome;
    private $preco;

    public function __construct($nome, $preco)
    {
        $this->nome = $nome;
        $this->preco = $preco;
    }

    /** GETTERS AND SETTERS **/
}

class Item
{
    private $produto;
    private $quantidade;

    public function __construct(Produto $produto, $quantidade)
    {
        $this->produto = $produto;
        $this->quantidade = $quantidade;
    }
}

Nesse exemplo, temos a classe Produto e a classe Item, a Item recebe como parâmetro no
construtor uma instância de Produto e a quantidade desejada desse produto.

Agora se você quer saber a quantidade de produtos que um item possui você pode fazer algo assim?

$produto = new Produto('Livro PHP', 78.50);
$item = new Item($produto, 5);
echo count($item);

Até poderia, mas não seria o resultado esperado. O resultado desse count() seria 1. E agora?

É claro que você poderia criar um método getQuantidade(), ou resolver de alguma outra forma, idéias não faltam :)

Mas com a SPL você pode sim realizar o código acima e obter o resultado esperado!!!

Vamos lá!

Basta que a classe Item implemente a Countable como no exemplo abaixo.


class Item implements Countable
{
    private $produto;
    private $quantidade;

    public function __construct(Produto $produto, $quantidade)
    {
        $this->produto = $produto;
        $this->quantidade = $quantidade;
    }

    public function count()
    {
        return $this->quantidade;
    }
}

A interface Countable, obriga você implementar um método count(), mas ai você deve estar se perguntando: “Tá mas onde esta a graça nisso?”. Eu respondo, execute novamente o código abaixo.

$produto = new Produto('Livro PHP', 78.50);
$item = new Item($produto, 5);
echo count($item);

Agora sim! O resultado será 5, isso acontece porque sua classe implementou a interface Countable, e agora o PHP sabe que ele pode chamar o método count() da sua classe quando você utilizar a função count() nativa.

É isso, espero que tenham gostado e até a próxima.

http://br3.php.net/manual/pt_BR/countable.count.php

Categories: PHP, SPL Tags: , ,

Spam Protection by WP-SpamFree