Hoje iniciaremos uma série de artigos que abordam a criação de uma classe php totalmente orientada a objeto para geração de formulários. Porém, antes vamos observar brevemente as características do form, seus atributos e elementos adicionais.
Os formulários HTML são estruturas que permitem a usuários submeterem dados a uma página. Esses dados podem ser tratados e/ou armazenados dependendo da aplicação. Possuem uma tag de abertura e outra de fechamento, inserindo os elementos adicionais entre essas duas.
Estrutura:<br /><form (atributos/valores)> (elementos) </form>Atributos:
- accept
- accept_charset
- action
- method
- enctype
Elementos Adicionais:<br />- input - <input (atributos/valores) /><br />- option - <option (atributos/valores)> (nome) </option><br />- select - <select (atributos/valores)> (elemento option) ou (elemento optgroup) </select><br />- textarea - <textarea (atributos/valores)> (texto) </textarea><br />- button - <button (atributos/valores)> (nome) </button><br />- label - <label (atributos/valores)> (rótulo) </label><br />- fieldset - <fieldset (atributos/valores)> (elemento legend [opcional] ) (elementos) </fieldset><br />- optgroup - <optgroup (atributos/valores)> (elemento option) </optgroup>Com base nessas informações, iniciaremos a construção de nossa classe genérica.
Criação da classe commons (comum), attribute (atributo) e element (elemento)
O primeiro passo será a criação das classes genéricas, ou seja, as classes que serão utilizadas como extensões para as demais classes. A classe commons será responsável pelos métodos __set() e __get(). A classe attribute será a instância de nossos atributos e, por fim, a classe element manipulará essas instâncias de attribute.
Class commons
Definiremos a classe commons como abstrata (abstract), pois ela não deve ser instanciada, servirá apenas de apoio para as demais. Adicionamos então dois métodos de interceptação (intercepções – conceito introduzido no PHP5), o método __set() e __get().
O método __set() interceptará a atribuição de valores a propriedades do objeto. Assim, sempre que for atribuído um valor a uma propriedade do objeto, automaticamente essa atribuição passará pelo método __set().
O método __get() interceptará requisições de propriedades do objeto. Assim, sempre que for requisitada uma propriedade, automaticamente essa requisição passará pelo método __get().
abstract class commons {<br /> function __set( $property,$val ) {<br /> $this->$property = $val;<br /> }<br /> <br /> function __get( $property ) {<br /> return $this->$property;<br /> }<br />}Class attribute
A classe attribute será uma extensão da classe commons, herdando os métodos __set() e __get(). Definimos também a mesma como final. Adicionamos duas variáveis, attribute e value, responsáveis por guardar o nome do atributo e seu valor. Então incluímos o método construtor __construct() que atribuirá o valor de attribute e value na criação do objeto, caso seja passado algum valor.
final class attribute extends commons {<br /> protected $attribute;<br /> protected $value;<br /> <br /> function __construct( $attribute,$value ) {<br /> $this->attribute = $attribute;<br /> $this->value = $value;<br /> }<br />}Class element
A classe element será uma extensão da classe commons e abstrata (abstract). A função desta classe será manipular os objetos attribute, para isso adicionaremos três métodos: addAttribute, hasAttributes e getAttributes.
Como o próprio nome já descreve, o método addAttribute adicionará na array attributes uma instância do objeto attribute. A palavra attribute antes de $attribute descreve que a variável recebida deverá ser um objeto attribute. hasAttributes tem a finalidade de verificar se a array attributes possui filhos, retornando um booleano.
Por fim, o método getAttributes percorre os atributos contidos na array attribute e os transformam em uma string plana para serem adicionados mais tarde aos elementos. Definimos também o método draw como abstrato (abstract), obrigando as subclasses que herdarem element a implementar draw().
abstract class element extends commons {<br /> protected $attributes;<br /> <br /> final public function addAttribute( attribute $attribute ) {<br /> $this->attributes[] = $attribute;<br /> }<br /> <br /> final public function hasAttributes() {<br /> return count( $this->attributes ) > 0;<br /> }<br /> <br /> final public function getAttributes() { <br /> $elementAttributes = ''; <br /> foreach( $this->attributes as $attribute ) {<br /> $elementAttributes .= "{$attribute->attribute}=\"{$attribute->value}\" ";<br /> }<br /> return $elementAttributes; <br /> }<br /> <br /> abstract function draw(); <br />}Na segunda parte da série de artigos, vamos iniciar a construção dos elementos. Espero vocês. Até a próxima!







