Olá pessoal! Neste post estarei explicando de maneira resumida e explificando o uso de algumas interfaces contidas na SPL. (Standard PHP Library)
SeekableIterator
Trata-se de uma interface que junta a interface Iterator com a assinatura de mais um método, o seek().
Podendo assim, saltar posições na lista, ao invés de tê-la que percorrer até chegar a posição desejada.
Métodos públicos:
- current() - Retorna o elemento atual.
- key() - Retorna o índice do elemento atual.
- next() - Move o índice para o próximo elemento.
- rewind() - Coloca o índice no começo da lista.
- seek($index) - Move o índice para a posição indicada.
- valid() - Verifica se o elemento existe.
Exemplo: visualizar.
ArrayAccess
Interface que provê acesso ao objeto da mesma forma que acessamos à dados de uma array.
Métodos públicos:
- offsetExists($offset) - Chamado quando é testado a iniciação de um índice com isset().
Ex.: if (isset($obj[0])) { ... }
- offsetGet($offset) - Chamado quando é feito acesso a dados indicando um índice.
Ex.: $obj[0];
- offsetSet($offset, $value) - Chamado quando é atribuido valor a um elemento da lista.
Ex.: $obj[0] = 'foo';
- offsetUnset($offset) - Chamado quando usado em unset().
Ex.: unset($obj[0]);
Exemplo: visualizar.
Countable
Torna possível a função count() retornar um valor a respeito da quantia de alguma informação que for implementada.
Método público:
- count() - Chamado quando é utilizada a função count() no objeto.
Ex.: count($obj);
Exemplo: visualizar.
Vale lembrar que uma interface definida por nós usuários, não seria possível prover o que as da SPL faz. Como foi visto, por exemplo, permitir acesso a dados no objeto como acessamos os de uma array. Fazer com que uma função bult-in, como a count(), invocar um método quando for passado um objeto de uma classe que implemente a interface Countable. E etc.
Por tanto, isso deve se ao fato delas serem implementadas na Zend Engine.
Então, para encerrar, veja um exemplo utilizando as 3 interfaces vistas anteriormente.
E para quem deseja conhecer mais sobre a SPL, veja a documentação.
Até a próxima.