... Eis que surge a dúvida, como eu conto os atributos de um objeto? Será que count/sizeof funciona? Vamos testar?
- class Pessoa{
- private $nome;
- private $sexo;
- private $idade;
- public function getNome() {
- return $this->nome;
- }
- public function setNome($nome) {
- $this->nome = $nome;
- }
- public function getSexo() {
- return $this->sexo;
- }
- public function setSexo($sexo) {
- $this->sexo = $sexo;
- }
- public function getIdade() {
- return $this->idade;
- }
- public function setIdade($idade) {
- $this->idade = $idade;
- }
- }
Vamos criar uma instância dessa classe e popular ela, depois utilizamos o count na busca de um resultado mágico ok?
- $pv = new Pessoa();
- $pv->setNome("Paulo Victor");
- $pv->setSexo("M");
- $pv->setIdade("23");
- echo sizeof($pv);
OBS: sizeof é um atalho para a função count
I ai ferro, será que tem algo específico para contar um objeto?
..... Pesquisando e pesquisando descobrimos que a melhor solução nesse caso é fazer um cast do objeto para array, juro, dentro do count isso é lindo, assim como diz na documentação do php veja:
You need to type cast the object as an array for it to count correctly. (fonte: http://www.php.net/manual/en/function.count.php)
Então ficaria assim:
- $pv = new Pessoa();
- $pv->setNome("Paulo Victor");
- $pv->setSexo("M");
- $pv->setIdade("23");
- echo sizeof((array) $pv); // 3
Que simples não é? Igual a epoca em que jogavamos Alex kidd(foto, graaande alex kidd)
Pois bem, ai talvez vc me faça uma pergunta(diga-se de passagem, muito inconveniente kkkk) se não existem forma de tornar a contagem mais lógica de objetos, e ai amiguinho eu te dou uma resposta de alto nível que é; O PHP se preparou para tudo(quase tudo) e para esses casos existe a interface ArrayAccess que permite vc manipular objetos como array e array o PHP já tem 321402342034923049203492304 funções.
Mas, esse é um assunto para o próximo artigo(que eu juro q vou falar sobre).
Agora se vc quer contar exatamente um atributo e não quer ter muito trabalho eu idico dar uma lida na interface Countable da 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) aqui no blog do Thiago Rigo tem uma boa explicação sobre ela http://thiagorigo.com/blog/2010/07/spl-countable/
Então é isso. Valeu!
Otimo post Paulo, a forma q vc aborda uma questão torna o assunto agradavel, parabéns
ResponderExcluirE eu que achava que alex kidd era difícil!!! Brincadeira, mandou bem. Congrats!
ResponderExcluir