Instalações PHP são geralmente customizadas - por exemplo, diferentes limites de memória, valores de timeout, etc. A primeira coisa que o Phing faz é modificar os valores do PHP INI para criar um ambiente PHP padrão. Isto é executado pela camada de inicialização do Phing, que usa um procedimento de inicialização de três níveis. Basicamente, executando três arquivos:

Em uma primeira análise pode parecer desnecessário. Por que três níveis de inicialização? A razão principal por essa divisão é porque o Phing foi construído para que outros frontends (PHP-GTK, por exemplo) pudessem ser usados no lugar da linha de comando.

Scripts empacotados

Estes scrips tecnicamente não são obrigatórios, mas são disponibilizados para facilitar o uso. Imagine se você tivesse que digitar isso toda vez que você quisesse fazer o build do projeto:

php -qC /path/to/phing/bin/phing.php -verbose all distro snapshot

De fato não parece muito elegante. Além disso, se você não definiu todas as suas variáveis de ambiente, estes scripts podem adivinhar os valores corretos para você. Ainda assim, você deveria definí-las sempre.

Os scripts dependem da plataforma, então você encontrará scripts shell para plataformas Unix (sh) assim como os scripts batch para a plataforma Windows. Se você definir seu path corretamente você poderá chamar o Phing de qualquer lugar do seu sistema com o seguinte comando (referindo ao exemplo acima):

phing -v2 all distro

A aplicação principal (phing.php)

Basicamente chama classe Phing que executa toda a lógica para voce. Se você olhar o código fonte do arquivo phing.php, você verá que toda a inicialização é feita na classe Phing. O phing.php é simplesmente um arquivo para permitir a chamada do Phing na linha de comando.

A classe Phing

Uma vez que todos os passos anteriores da inicialização foram executados com sucesso, a classe Phing é incluída e a inicialização, Phing::startup(), é chamada pelo script principal da aplicação. Ela define os componentes do sistema, configurações INI, PEAR e algumas outras coisas. O processo de inicialização detalhado é o seguinte:

Depois que a aplicação principal completa todas as operações (com sucesso ou não) ela chama Phing::shutdown(CODIGO_DE_SAIDA), que cuida da destruição correta de todos os objetos e do encerramento correto do sistema, retornando um código de saída para utilização do shell.