Skip to content

2.4 PHP

Davi Ramos edited this page Oct 5, 2016 · 14 revisions

As regras de estilo estabelecidas para PHP são baseadas no guia de estilo para PHP da Google.

Espaçamento com 4 espaços

Na criação de uma classe, ou uma função ou um if() é recomendado a utilziação de 4 espaços. Caso você utilize a tecla tab para poder indicar que aquele bloco de código está dentro de algo, configure seu editor de textos, para que tenha o espaçamento com 4 espaços.

Quantidade de caracteres por linha

Não deve haver um limite rigoroso (hard limit) no comprimento das linhas. O limite máximo deve ser de 120 caracteres, entretanto é recomendado 80 caracteres ou menos.

Utilização das linhas em branco

Deve haver uma linha em branco após a declaração de namespace, e deve haver uma linha em branco após o bloco de declarações de uso. O exemplo a seguir, abrange as regras que foram citadas:

<?php
    <?php
namespace Vendor\Package;

use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface {
    public function sampleFunction($a, $b = null) {
        if ($a === $b) {
            bar();
        } elseif ($a > $b) {
            $foo->bar($arg1);
        } else {
            BazClass::bar($arg2, $arg3);
        }
    }

    final public static function bar() {

    }
} 

Arquivos

  • Todos os arquivos PHP deve usar o Unix LF (avanço de linha) linha final;
  • Todos os arquivos PHP devem terminar com uma linha em branco;
  • A tag de fechamento?> Deve ser omitida a partir de arquivos contendo apenas PHP;

Linhas

  • Não deve haver espaço em branco no final de linhas não-em-branco;
  • As linhas em branco podem ser adicionadas para aumentar a legibilidade e para indicar blocos de código relacionados;
  • Não deve haver mais de um comando (statement) por linha;

Palavras-chave e True/False/Null

  • Palavras-chave do PHP devem ser em letra minúscula (lower case);
  • As constantes do PHP true, false e null devem ser em letra minúscula (lower case).

Namespace e Uso de Declarações

  • Quando presente, deve haver uma linha em branco após a declaração de namespace;
  • Deve utilizar uma palavras-chave, por declaração;
  • Deve haver uma linha em branco após o bloco use;

Exemplo:

####Classes, Propriedades e Métodos

<?php
namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

// ... additional PHP code ...
?>

O termo "classe" refere-se a todas as classes, interfaces e características.

Extends e Implements
  • O extends e implements são palavras-chave que devem ser declarados na mesma linha que o nome da classe;
  • A chave de abertura para a classe deve ir em sua própria linha;
  • A chave de fechamento para a classe deve ir na próxima linha após o corpo.

Exemplo:

<?php
    namespace Vendor\Package;

    use FooClass;
    use BarClass as Bar;
    use OtherVendor\OtherPackage\BazClass;

    class ClassName extends ParentClass implements \ArrayAccess, \Countable {
        // constants, properties, methods
    }
?>
  • A lista de implements podem ser divididas em várias linhas, onde cada linha subseqüente é recuado uma vez. Ao fazê-lo, o primeiro item da lista deve ser na linha seguinte, e deve haver apenas uma interface por linha.
<?php
    namespace Vendor\Package;

    use FooClass;
    use BarClass as Bar;
    use OtherVendor\OtherPackage\BazClass;

    class ClassName extends ParentClass implements
        \ArrayAccess,
        \Countable,
        \Serializable {
            // constants, properties, methods
    }
?>
Propriedades
  • Visibilidade deve ser declarado em todas as propriedades;
  • A palavra-chave var não deve ser utilizado para declarar uma propriedade;
  • Não deve haver mais de uma propriedade declarada por instrução;
  • Nomes de propriedade não deve ser prefixado com um único sublinhado para indicar protegida ou a visibilidade privada. Exemplo:
<?php
    namespace Vendor\Package;

    class ClassName {
        public $foo = null;
    }
?>
Métodos
  • Visibilidade deve ser declarado em todos os métodos;
  • Nomes de método não deve ser prefixado com um único sublinhado para indicar protegida ou a visibilidade privada;
  • Nomes método não deve ser declarada com um espaço após o nome do método. A chave de abertura deve ir em sua própria linha, ea chave de fechamento deve ir na linha seguinte, seguindo o corpo. Não deve haver um espaço após o parêntese de abertura, e não deve haver um espaço antes do parêntese de fechamento;

Exemplo:

<?php
    namespace Vendor\Package;

    class ClassName {
        public function fooBarBaz($arg1, &$arg2, $arg3 = []) {
            // method body
        }
    }
?>
Argumentos de Métodos
  • Na lista de argumentos, não deve haver um espaço antes de cada vírgula e deve haver um espaço após cada vírgula;
  • Os argumentos de métodos com valor padrão devem vir no final da lista de argumentos;

Exemplo:

<?php
    class ClassName {

        public function myRegister($age, $record, $name = 'davi') {
            // corpo do método
        }
    }
?>
  • As listas de argumentos podem ser dividas em múltiplas linhas, onde cada linha subsequente é indentada uma vez. Quando fizer isto, o primeiro item na lista deve estar na próxima linha e deve haver um argumento por linha;
  • Quando a lista de argumento for dividida em múltiplas linhas, o parêntese de fechamento e a chave de abertura devem ser colocados na mesma linha com um espaço entre eles;
Abstract, final e Static
<?php
namespace VendorPackage;

    class ClassName {
        public function myFamily(
            $father,
            $mother,
            $brother,
        ) {
            // corpo do método
        }
    }
?>
  • Quando presentes, as declarações abstract e final deve preceder a declaração de visibilidade;
  • Quando presente, a declaração estática deve vir após a declaração de visibilidade;

Exemplo:

<?php
    namespace Vendor\Package;

    abstract class ClassName {
        protected static $foo;

        abstract protected function zim();

        final public static function bar() {
            // method body
        }
    }
?>
Método e Chamadas de função
  • Ao fazer um método ou função de chamada, não deve haver um espaço entre o método ou nome da função ou parêntese de abertura. Não deve haver um espaço após o parêntese de abertura, e não deve haver um espaço antes do parêntese de fechamento. Na lista de argumentos, não deve haver um espaço antes de cada vírgula, e deve haver um espaço após cada vírgula;

Exemplo:

<?php
    bar();
    $foo->bar($arg1);
    Foo::bar($arg2, $arg3);
?>
  • Listas de argumento pode ser dividida em várias linhas, onde cada linha subseqüente é recuado uma vez. Ao fazê-lo, o primeiro item da lista deve ser na linha seguinte, e deve haver apenas um argumento por linha;

Exemplo:

<?php
    $foo->bar(
        $longArgument,
        $longerArgument,
        $muchLongerArgument
    );
Estruturas de Controle

As regras gerais de estilo para estruturas de controle são as seguintes:

  • Deve haver um espaço depois da palavra-chave da estrutura de controle;
  • Não deve haver espaço depois do parêntese de abertura;
  • Deve haver um espaço entre o parêntese de fechamento e a chave de abertura;
  • A estrutura do corpo deve ser indentada uma vez;
  • A chave de fechamento deve vir na próxima linha após o corpo;

O corpo de cada estrutura deve ser delimitados por chaves. Isso padroniza a forma como as estruturas são vistas, e reduz a probabilidade de introdução de erros, quando novas linhas são adicionadas ao corpo;

if, elseif, else

Uma estrutura if se parece com a do próximo exemplo. Note-se a colocação de parênteses, espaços e chaves. E observe também que else e o elseif estão na mesma linha que a chave de fechamento do corpo anterior;

<?php
    if ($expr1) {
        // if body
    } elseif ($expr2) {
        // elseif body
    } else {
        // else body;
    }
?>    

A palavra-chave elseif deve ser usado em vez de else if para que todas as palavras-chave de controle parecido com palavras simples.

switch, case

A estrutura switch se parece com a do próximo exemplo. Note-se a colocação de parênteses, espaços e chaves. A exposição do caso deve ser recuado uma vez de switch, e a palavra-chave break (ou outra palavra-chave de terminação) deve ser recuado no mesmo nível como o corpo caso;

<?php
    switch ($expr) {
        case 0:
            echo 'First case, with a break';
            break;
        case 1:
            echo 'Second case, which falls through';
            // no break
        case 2:
        case 3:
        case 4:
            echo 'Third case, return instead of break';
            return;
        default:
            echo 'Default case';
            break;
}
while, do while

A estrutura while se parece com o próximo exemplo. Note-se a colocação de parênteses, espaços e chaves.

<?php
    while ($expr) {
        // structure body
}

Agora observe como a estrutura do while é semelhante a do while, representada no próximo exemplo. Repare na colocação de parênteses, espaços e chaves.

<?php
    do {
        // structure body;
    } while ($expr);
?>
For

A instrução for é representada no próximo exemplo. Note-se a colocação de parênteses, espaços e chaves.

<?php
for ($i = 0; $i < 10; $i++) {
// for body
}
Foreach

A instrução foreach é representada no próximo exemplo. Note-se a colocação de parênteses, espaços e chaves.

<?php
foreach ($iterable as $key => $value) {
// foreach body
}
Try, catch

A instrução Try, catch é representada no próximo exemplo. Note-se a colocação de parênteses, espaços e chaves.

<?php
    try {
        // try body
    } catch (FirstExceptionType $e) {
        // catch body
    } catch (OtherExceptionType $e) {
        // catch body
    }
Closures

Funções anonimas, também conhecidas como closures, permitem a criação de funções que não tem o nome especificado. Elas são mais úteis como o valor de parâmetros callback, mas podem tem vários outros usos.

Funções anônimas são implementadas utilizando a classe Closure. Algumas regras básicas para implementação do Closures:

  • Closures deve ser declarado com um espaço após a palavra-chave função, e um espaço antes e depois da palavra-chave uso;

  • A chave de abertura deve ir na mesma linha, e a chave de fechamento deve ir na linha seguinte, seguindo o corpo;

  • Não deve haver um espaço após o parêntese da lista de argumentos ou lista de variáveis de abertura, e não deve haver um espaço antes do parêntese de fechamento da lista de argumentos ou lista de variáveis;

  • Na lista de argumentos e lista de variáveis, não deve haver um espaço antes de cada vírgula, e deve haver um espaço após cada vírgula;

  • Argumentos de fechamento com valores padrão deve ir no final da lista de argumentos;

Exemplo:

<?php
    $closureWithArgs = function ($arg1, $arg2) {
        // body
    };

    $closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
        // body
    };
?>    
  • Listas de argumentos e listas de variáveis podem ser divididas em várias linhas, onde cada linha subseqüente é recuado uma vez. Ao fazê-lo, o primeiro item da lista deve ser na linha seguinte, e deve haver apenas um argumento ou variável por linha;

Quando a lista final (de argumentos ou variáveis) é dividido em várias linhas, os parêntese de fechamento e chave de abertura deve ser colocado junto em sua própria linha com um espaço entre elas;

Os próximos exemplos são de encerramentos com e sem listas de argumentos e listas de variáveis divididas em várias linhas:

<?php
    $longArgs_noVars = function (
        $longArgument,
        $longerArgument,
        $muchLongerArgument
    ) {
        // body
    };

    $noArgs_longVars = function () use (
        $longVar1,
        $longerVar2,
        $muchLongerVar3
    ) {
        // body
    };

    $longArgs_longVars = function (
        $longArgument,
        $longerArgument,
        $muchLongerArgument
    ) use (
        $longVar1,
        $longerVar2,
        $muchLongerVar3
    ) {
        // body
    };

    $longArgs_shortVars = function (
        $longArgument,
        $longerArgument,
        $muchLongerArgument
    ) use ($var1) {
        // body
    };

    $shortArgs_longVars = function ($arg) use (
        $longVar1,
        $longerVar2,
        $muchLongerVar3
    ) {
        // body
    };
?>    

Note que as regras de formatação também se aplicam quando o closure é usado diretamente em uma chamada de função ou método como um argumento.

<?php
    $foo->bar(
        $arg1,
        function ($arg2) use ($var1) {
            // body
        },
        $arg3
    );
?>
Clone this wiki locally