Pt:Componentes
From PRADO Wiki
Um componente é uma instância de TComponent ou de uma classe filha dele. A classe base TComponent implementa o mecanismo de propriedades e eventos de componentes.
Contents |
Propriedades de Componente
Uma propriedade de um componente pode ser vista como uma variável pública que descreve uma característica de um componente, como a cor de fundo, tamanho da fonte, etc. Uma propriedade é definida pela existência dos métodos getter/setter numa classe de um componente. Por exemplo, em TControl, definimos a propriedade ID utilizando os seguintes métodos getter/setter,
class TControl extends TComponent { public function getID() { ... } public function setID($value) { ... } }
Obter ou informar o valor da propriedade ID funciona da mesma maneira que fazemos com uma variável.
$id = $component->ID; $component->ID = $id;
Equivalentemente,
$id = $component->getID(); $component->setID( $id );
Uma propriedade é somente leitura se possuir apenas o método getter e não possuir o setter. Em PHP o nome dos métodos e das variáveis não diferencia maiúsculas de minúsculas. Uma classe de componente herda todas as propriedades das suas classes ancestrais.
Sub-propriedades
Uma sub-propriedade é uma propriedade de uma propriedade que seja algum tipo de objeto. Por exemplo, TWebControl tem a propriedade Font que é do tipo TFont. Então, nos referimos a propriedade Name de Font como uma sub-propriedade de TWebControl.
Para obter ou informar a sub-propriedade Name, utilize os seguintes métodos:
$name = $component->getSubProperty('Font.Name'); $component->setSubProperty('Font.Name', $name);
Ou equivalentemente,
$name = $component->getFont()->getName(); $component->getFont()->setName( $name );
Eventos de Componente
Eventos de componente são propriedades especiais tomam os nomes de métodos como seus valores. Anexando (setando) um método à um evento enganchará o método aos lugares onde o evento é chamado. Consequëntemente, o comportamento de um componente pode ser modificado de uma maneira que não fora prevista durante o desenvolvimento do componente.
Um evento de componente é definido pela existência de um método onde o nome inicia-se por "on". O nome do evento é o nome do método e ambos não diferenciam carecteres maiúsculos. Por exemplo, em um "TButton" nós temos:
class TButton extends TWebControl { public function onClick( $param ) { ... } }
Isto define um evento chamado "OnClick", e o manipulador pode ser anexado ao evento usando uma das seguintes maneiras:
$button->OnClick = $callback; $button->OnClick->add( $callback ); $button->OnClick[] = $callback; $button->attachEventHandler( 'OnClick' , $callback );
Onde a variável "$callback" refere-se à uma chamada PHP válida (um nome de função, um método de classe "array($objeto,'Método')", etc).
Namespaces
Um namespace é um agrupamento lógico de alguns nomes de classes que podem ser diferenciados de outros nomes de classes quando seus nomes forem iguais. Como o PHP não suporta namespaces intrinsicamente, você não pode criar intâncias de duas classes com o mesmo nome, porém com definições diferentes. Para diferenciar classes definidas por usuários, todas as classes PRADO iniciam com a letra "T" (de "Tipo"). Usuários são avisados para não nomearem suas classes deste jeito. Porém eles poderão iniciar suas classes de outra maneira.
Um namespace no PRADO é considerado como um diretório contendo um ou diversos arquivos de classes. Uma classe pode ser especificada sem ambiguidade utilizando como um namespace encontrado pelo nome de classe. Cada namespace no PRADO é especificado no seguinte formato:
PathAlias.Dir1.Dir2
onde "PathAlias" é um apelido de algum diretório, enquanto "Dir1" e "Dir2" são sub-diretórios daquele diretório. Uma classe chamada "MyClass" definida no diretório "Dir2" pode agora ser totalmente qualificada como "PathAlias.Dir1.Dir2.MyClass".
Para usar um namespace no seu código, faça como a seguir:
Prado::using('PathAlias.Dir1.Dir2.*');
que adiciona o diretório referenciado por "PathAlias.Dir1.Dir2" no path de inclusão do PHP e as classes definidas sob este diretório podem ser instanciadas sem o prefixo do namespace. Você também pode incluir uma definição individual de classe com:
Prado::using('PathAlias.Dir1.Dir2.MyClass');
que incluirá o arquivo de classe se "MyClass" não estiver definida.
Para maiores detalhes sobre definição de path aliases, veja a sessão[Pt:Configuracao_das_aplicacoes Configuração das Aplicações].
Instanciando Componentes
A instanciação de componentes significa criar instâncias de classes de componentes. Existem dois tipos de instanciação de componentes: estática e dinâmica. Os componentes criados são chamados componentes estáticos e dinâmicos, respectivamente.
Instanciando Componentes Dinamicamente
A instanciação dinâmica de componentes significa criar intâncias de componentes no seu código PHP. Isto é o mesmo que a criação de objetos no PHP. Um componente pode ser criado dinamicamente em PHP usando um dos dois métodos a seguir:
$component = new ComponentClassName; $component = Prado::createComponent('ComponentType');
onde "ComponentType" refere-se ao nome da classe ou o nome do tipo no formato de namespace (por exemplo, "System.Web.UI.TControl"). A segunda metodologia foi introduzida para suprir a ausência de namespaces no PHP.
Instanciando Componentes Estaticamente
A instanciação estática de componentes significa criar componentes através de Configurações. O trabalho de criação é realizado pelo PRADO. Por Exemplo, em uma configuração de Aplicação, pode-se configurar um módulo para ser carregado quando a aplicação rodar. O módulo é como um componente criado pelo PRADO. A instanciação estática de componentes é mais comum em templates. Toda tag de componente em um template especifica um componente que será criado automaticamente pelo PRADO quando o template for carregado. Por exemplo, num template de página, a tag demonstrada a seguir conduzirá a criação de um componente "TButton" na página:
<com:TButton Text="Register" />

