Pt:Colecoes
From PRADO Wiki
Contents |
Coleções
Coleção, em programação, é uma estrutura básica de dados. Numa programação tradicional em PHP, são utilizados arrays
para representar a coleção de estrutura de dados. Um array PHP é uma mistura de um array indexado e uma tabela.
Para habilitar a manipulação de coleções orientadas à objetos, o PRADO fornece algumas classes poderosas. Entre elas, o "Tlist" e o "TMap" são fundamentais e normalmente servem como classes de base para outras classes de coleções. Como muitos componentes PRADO possuem propriedades que são do tipo coleção, é muito importante para os desenvolvedores serem experts no uso das classes de coleções do PRADO.
Usando o TList
O Objeto "TList" representa um array indexado, por exemplo, um array (objeto) com índices 0, 1, 2, ...
O "TList" pode ser usado como um array. Por Exemplo:
$list=new TList; // Cria um novo objeto TList ... $item=$list[$index]; // Lê o ítem no índice específico $list[]=$item; // cria um item no final da lista $list[$index]=$item; // sobrepõe o item em um índice específico unset($list[$index]); // remove o índice $index if(isset($list[$index])) // testa se a lista possui um item em $index foreach($list as $index=>$item) // lê cada item da lista
Para obter a quantidade de itens da lista, utilize a propriedade "Count". Atenção, não use "count($list)", pois sempre será retornado 1.
Adicionando, o TList implementa alguns métodos usados normalmente para manipulação dos dados da lista. Eles incluem:
- clear(): remove TODOS os itens da lista.
- contains(): testa se a lista contém um item específico.
- indexOf(): obtém o índice iniciado por zero de um item específico da lista.
- toArray(): retorna a lista de itens como um array .
- copyFrom(): popula a lista com dados com um array ou objeto percorrível (incluindo o TList). Dados existentes serão sobrepostos.
- mergeWith(): adiciona a lista com dados um array ou objeto percorrível (incluindo o TList).
Utilizando propriedades de componentes baseados no TList
Como mencionado acima, muitas propriedades de componentes PRADO são baseadas em TList ou classes derivadas. Essas propriedades compartilham todos os usos citados.Por exemplo, "TControl" (a classe-base de todos os controles PRADO) possui a propriedade chamada "Controls" que representa a coleção de controles-filho. O tipo do "TControls" é "TControlCollection" que extende o "TLisT". Consequentemente, para adicionar um controle-filho, nós podemos utilizar como a seguir:
$control->Controls[]=$newControl;
Para percorrer os controles-filho, nós podemos usar:
foreach($control->Controls as $childControl) ...
Outro exemplo é a propriedade "Items", disponível para controles de lista, como "TRepeater", "TDataList" e "TDataGrid". Nestes controles, a classe antecessora a "Items" é o TList.
Extendendo o TList
Frequentemente, nós precisamos extender o "TList" para fornecer operações adicionais para cada inclusão ou exclusão de um item. Os únicos métodos que as classes-filho precisam sobrepor são "insertAt()" e "removeAt()". Por exemplo, para certificar que a lista contém apenas items do tipo "TControl", nós podemos sobrepor o "insertAt()" como a seguir:
public function insertAt($index,$item) { if($item instanceof TControl) parent::insertAt($index,$item) else throw new Exception('TControl required.'); }
Utilizando o TMap
O objeto "TMap" representa uma tabela misturada (ou nós chamamos de um array indexado por string, ou como é mais conhecido, hash table).
Similar ao "TList", o "TMap" pode ser usado como um array:
$map=new TMap; // cria um objeto TMap... $map[$key]=$value; // adiciona um par chave-valor unset($map[$key]); // remove o valor da chave específica if(isset($map[$key])) // se o mapa contém a chave... foreach($map as $key=>$value) // percorre os itens no mapa...
A propriedade "Count" contém o número de itens no mapa enquanto a propriedade "Keys" retorna a lista de chaves utilizadas no mapa.
Os métodos a seguir foram fornecidos ao "TMap" por conveniência:
- clear(): remove todos os itens do mapa.
- contains(): testa se o mapa contém a chave específica.
- toArray(): retorna um array representando os itens no mapa.
- copyFrom(): popula o mapa com os dados de um array ou objeto percorrível (incluindo o "TMap"). Itens existentes serão removidos
- mergeWith(): adiciona ao mapa dados de um array ou objeto percorrível (incluindo o "TMap").
Utilizando o TAttributeCollection
O "TAttributeCollection é uma classe especial que extende o "TMap". É principalmente utilizada pela propriedade "Attributes" do "TControl".
Além das funcionalidades normais do "TMap", o "TAttributeCollection" permite que você atribuir e receber a coleção de itens como propriedades, por exemplo:
$collection->Label='value'; // equivalente a: $collection['Label']='value'; echo $collection->Label; // equivalente a: echo $collection['Label'];
Note que, $collection acima NÃO possui uma propriedade "Label".
Diferente do "TMap", as chaves no "TAttributeCollection" NÃO diferenciam maiúsculas. Conseqüêntemente, $collection->Label é equivalente a $collection->LABEL.
Por causa das novas características acima, quando negociamos com a propriedade "Attributes" dos controles, nós podemos tirar vantagem do conceito de sub-propriedade e configurar os valores dos atributos do controle em um template como a seguir:
<com:TButton Attributes.onclick="if(!confirm('Are you sure?')) return false;" .../>
que irá adicionar um atributo com nome "onclick" ao controle "TButton".

