= Padrões de Codificação Php = Os padrões de codificação abaixo são muito importantes para a legibilidade do código. Procure seguir fielmente o que está descrito neste documento, para que o seu código fique padronizado e possa ser lido por outras pessoas que venham a dar manutenção em seu processo. == Tags PHP == * Usar para delimitar código PHP, pois é a forma mais portável de incluir código PHP em diferentes sistemas operacionais e configurações. == Identação e comprimento de linha == * Usar tabulação equivalente a 4 espaços. * É recomendado que as linhas tenham entre 75-85 caracteres. == Comentários == * Comentários (blocos) de documentação [wiki:WF/PHPDoc PHPDoc] são obrigatórios; * Comentários adicionais explicativos, no meio do código, também são recomendados; * Comentários estilo multi-linha (/* */) e linha única (//) são recomendados, ao passo que estilos Perl/shell (#) devem ser evitados; * No comentário de elementos como classes ou funções, evitar repetir a classe do elemento na descrição. Por exemplo, no comentário de uma função, evitar incluir a palavra "função". == Incluindo código == * Includes somente no arquivo shared.php. Caso seja absolutamente necessário incluir algum arquivo fora deste local, atentar para estas recomendações: * Usar require_once ao incluir incondicionalmente arquivos de classe. * Usar include_once ao incluir condicionalmente arquivos de classe. * require_once e include_once não são funções, portanto parênteses não devem envolver o nome do arquivo. == Convenções de nomenclatura == === Classes === * Devem ter nomes descritivos. Evitar usar abreviações. Nomes de classes devem começar com uma letra maiúscula. * Exemplos: Classe, !MinhaClasse. === Métodos e funções === * Devem usar o padrão camel-case (Java). * Exemplos: metodo, meuMetodo. * Membros privados de classes são precedidos de um underscore. === Constantes === * Escritas em letras maiúsculas, com underscores separando palavras. * Podem ser prefixadas com o nome da classe/pacote onde elas são usadas. * As constantes true, false e null são exceções e devem ser escritas com letras minúsculas. === Variáveis globais === * Se o projeto precisar definir variáveis globais, seus nomes devem iniciar com um underscore seguido pelo nome do projeto e outro underscore. Por exemplo, o pacote PEAR usa uma variável global chamada $_PEAR_destructor_object_list. === Nome de arquivos === * De atividades: mesmo nome das atividades, adicionando a extensão .php. Exemplo: Compor.php, Escrever.php, Finalizar.php; * De templates: mesmo nome das atividades e respectivas ações, adicionando a extensão .tpl. Exemplo: Compor.tpl, Imprimir.tpl, Visualizar.tpl; * De classes: segue o formato class.nomeclasse.nomesuperclasse.inc.php. == Estruturas de controle == * Incluem as instruções if, for, while, switch, etc. Segue abaixo um exemplo: {{{ }}} * Instruções de controle devem ter um espaço entre a palavra-chave e a abertura de parênteses, para distingui-los de chamadas de funções. * É recomendado sempre usar chaves mesmo em situações onde elas são tecnicamente opcionais, pois aumentam a clareza da leitura e diminui a chance de erros lógicos serem introduzidos quando novas linhas forem adicionadas. * Para instruções switch: {{{ }}} == Chamadas de função == * Devem ser feitas sem espaços entre o nome da função e os parênteses, e o primeiro parâmetro; espaços entre vírgulas e cada parâmetro, e sem espaço entre o último parâmetro e o parênteses e o ponto-e-vírgula. Segue um exemplo: {{{ }}} * Como mostrado acima, deve haver um espaço entre a variável e o operador de atribuição e entre o operador e a chamada a função. Pode ser introduzidos mais espaços para aumentar a legibilidade. {{{ }}} == Definição de funções == * Argumentos com valores padrão aparecem ao final da lista de argumentos. Exemplo: {{{ }}} == Definição de classes == * A chave de abertura fica na linha inferior ao do nome da classe e a de fechamento fica na linha seguinte da última linha de código. {{{ }}} * Definir apenas uma classe por arquivo .php; * Classes com métodos contendo argumentos String esperando valores pré-definidos devem declarar atributos internos escritos em maiúscula para funcionarem como constantes com os valores válidos, visando minimizar erros de digitação do argumento e aproveitar o autocomplete dos editores para membros de classe. Por exemplo: {{{ showVersion($this->VERSION); } } ?> }}} * Deve-se seguir esta sequência de definições em uma classe: * Declaração de constantes; * Declaração de atributos; * Declaração de construtores; * Declaração de métodos. == Créditos == [http://framework.zend.com/manual/en/coding-standard.html Esta página é baseada nos padrões de codificação do Framework Zend]