SPL

PHP SPL parte 2: Countable

Posted on fevereiro 25, 2011. Filed under: PHP, SPL |

Contable é uma interface disponível através do SPL. Classes que implementam a interface Countable permitem o uso da função count() nos objetos dessa classe. Para usar a interface Countable em sua classe é necessário implementar o método count(). Segue a sinopse da interface:

Countable {
/* Methods */
  abstract public int count ( void )
}

Para exemplificar o uso da interface SPL Countable vamos criar uma classe chamada Usuario que recebe como parâmetro no construtor o número de usuários logados em um determinado sistema. O construtor irá atualizar a propriedade chamada $usuarios_logados. Para deixar essa classe de uma forma mais inteligente e usando o máximo possível de recursos de orientação a objetos estamos implementando a interface Countable. Para que a implementação seja válida precisamos criar o método count() que será invocado quando utilizarmos a função count() do PHP no objeto desta classe. O método count() simplesmente retorna o valor da propriedade $usuarios_logados que no caso é o número de usuários logados no sistema. No final do exemplo instânciamos a classe Usuario e definimos o valor 10 no construtor. Após instânciar, finalmente fazemos a chamada count($usuario) que devido a implementação da interface Countable irá rornar 10. Caso não houvesse a implementação da interface Countable na classe o retorno da chamada count($usuario) retornaria 1 que é o valor padrão quando usamos o count() em um objeto sem Countable.

<?php
class Usuario implements Countable {
  private $usuarios_logados;

  public function __construct($usuarios_logados)
  {
    $this->usuarios_logados = $usuarios_logados;
  }

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

$usuarios = new Usuario(10);
echo count($usuarios); // imprime 10

Ler Post Completo | Make a Comment ( None so far )

PHP SPL parte 1: ArrayObject

Posted on fevereiro 22, 2011. Filed under: PHP, SPL |

SPL, Standard PHP Library, é uma coleção de classes e interfaces com a finalidade de resolver problemas “comuns” e implementar de forma eficiente acesso à dados em classes. Pretendo mostrar neste e nos próximos posts formas de trabalhar com classes e interfaces SPL principalmente com as mais comuns como ArrayObject, Countable, Iterator, entre outras.

Para começar, vamos falar nesse artigo sobre a classe ArrayObject. Essa classe permite que objetos funcionem como se fossem arrays. Segue abaixo exemplo de um código utilizando ArrayObject. Veja que no construtor, setamos um array com alguns dados. Depois utilizamos o método append() para adicionar mais alguns campos. E finalmente usamos o foreach iterando os elementos do objeto como se estivessemos iterando um array.

<?php
$o = new ArrayObject(array('banana', 'laranja', 'milho'));
$o->append('chuchu');
$o->append('frango');

foreach($o as $val) {
  echo $val . PHP_EOL;
}

A saída do script acima será:

banana
laranja
milho
chuchu
frango

Alem do método append(), a classe ArrayObject nos fornece vários outros métodos úteis:

  • append($valor) – Adiciona valor no final do objeto/array
  • natsort() – Ordenação Natural nos elementos do objeto/array
  • ksort() – Ordenação nos elementos do objeto/array pelo índice
  • uksort($func) – Ordenação nos elementos do objeto/array pelo índice usando uma função definida pelo usuário
  • uasort($func) – Ordenação nos elementos do objeto/array usando uma função definida pelo usuário e preservando os índices
  • offsetExists($indice) – Verifica se determinado índice existe
  • offsetGet($indice) – Obtem valor de determinado índice
  • offsetSet($indice) – Seta um valor para determinado índice
  • offsetUnset($indice) – Exclui um elemento do objeto/array baseado em um índice específico

Vamos ao um exemplo mais útil. Vamos criar um primeiro exemplo sem a utilização do ArrayObject, usando somente arrays e depois um outro exemplo usando ArrayObject no lugar do array para percebermos a diferença. Portanto, no primeiro exemplo temos uma classe que possui uma propriedade chamada $valores. O construtor da classe inicializa a propriedade $valores como um array de 3 elementos. Perceba que para acessar o array desta classe devemos primeiro associá-lo à um variável ($a) para depois acessá-lo. Veja o exemplo abaixo:

<?php
class Valores {
  private $valores;

  public function __construct()
  {
    $this->valores = array("a", "b", "c");
  }
  public function getValores()
  {
    return $this->valores;
  }
}

$valores = new Valores();
$a = $valores->getValores();
echo $a[1]; // imprime "b"

Bom, agora vamos usar a classe ArrayObject no lugar do array que usamos no exemplo anterior.Perceba que agora para acessarmos os elementos do array não precisamos associá-lo à uma outra variável. Dessa maneira estamos trabalhando em um ambiente realmente voltado para orientação a objetos.

<?php
class Valores {
  private $valores;

  public function __construct()
  {
    $this->valores = new ArrayObject(array("a", "b", "c"));
  }
  public function getValores()
  {
    return $this->valores;
  }
}

$valores = new Valores();
echo $valores->getValores()->OffsetGet(1); // imprime "b"

As bibliotecas SPL do PHP ajudam a resolver problemas comuns a à deixar nosso código mais orientado a objetos. Além disso o uso de SPL melhora o desempenho da aplicação em várias situações com veremos nos próximos posts.

Ler Post Completo | Make a Comment ( 4 so far )

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: