SPL Countable
Eae pessoal!!!
Hoje venho falar de um assunto muito interessante, SPL.
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.