Esta seção existe para explicar - ou tentar - como o Phing "funciona". Particularmente,como o Phing processa o arquivo build e invoca tasks e tipos baseado nas tags que ele encontra.
Como o Phing interpreta os arquivos de build
O Phing usa uma classe ExpatParser e funções nativas do PHP para interpretação de XML para manipular os arquivos de build. Todas as classes de manipulação estendem a classe phing.parser.AbstractHandler. Estas classes manipulam as tags que são encontradas no arquivo de build.
Tasks principais e tipos são mapeados para tags XML nos arquivos defaults.properties - especificamente phing/tasks/defaults.properties e phing/types/defaults.properties.
Basicamente, funciona assim:
phing.parser.RootHandler é registrado para manipular o documento XML de build.
RootHanlder espera encontrar exatamente um elemento:
. Ele invoca o ProjectHandler com os atributos da tag ou retorna uma exceção se não for encontrado ou se alguma coisa for encontrada em seu lugar. ProjectHandler espera encontrar tags
; para elas ele invoca o TargetHandler. Ela também tem exceções para manipular certas tarefas que podem ser executadas com prioridade: , , , e ; para estas ele invoca a classe TaskHandler. Se uma tag apresentada não corresponde às tags esperadas, ele assume que ela é um tipo e invoca a classeDataTypeHandler. TargetHandler espera que todas as tags sejam tarefas ou tipos e invoca o manipulador apropriado (baseado no mapeamento especificado nos arquivos defaults.properties).
Tasks and tipos podem ter elementos aninhados, mas somente se eles corresponderem a um método create*() na classe de tarefa ou tipo. Por exemplo, uma tag aninhada pode corresponder a um método createParam() da task ou do tipo.