-
Notifications
You must be signed in to change notification settings - Fork 1
2.4 PHP
As regras de estilo estabelecidas para PHP são baseadas no guia de estilo para PHP da Google.
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.
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.
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() {
}
}
- 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;
- 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 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).
- 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.
- O
extends
eimplements
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
}
?>
- 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;
}
?>
- 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
}
}
?>
- 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;
<?php
namespace VendorPackage;
class ClassName {
public function myFamily(
$father,
$mother,
$brother,
) {
// corpo do método
}
}
?>
- Quando presentes, as declarações
abstract
efinal
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
}
}
?>
- 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
);
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;
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.
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;
}
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);
?>
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
}
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
}
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
}
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
);
?>