La mejor guía de estilo a la que nos podemos acoger a la hora de desarroyar un proyecto en PHP es al PHP Standards Recommendations (PSR). En concreto los PSR 1 y 2 que hacen referencia a codificación básica y al estilo de codificación respectivamente.
PSR-1 Basic coding standard
- Utilizar solo los tag
<?php ?>
y/o <?= ?>
, ningún otro tag de apertura/cierre (ejemplo <? ?>
, <% %>
, etc...).
- Utilizar siempre codificación UTF-8 sin BOM para el código PHP.
- Los archivos deben declarar clases, funciones, constantes, etc... o ejecutar la lógica (por ejemplo, generar resultados, cambiar configuraciones de .ini, etc.) pero no deberían hacer ambas cosas.
- Los espacios de nombres y las clases deben seguir PSR-0 ó PSR-4.
- Los nombres de clase se declaran en
StudlyCaps
.
- Las constantes se declaran en mayúsculas con separadores de subrayado (
MI_CONSTANTE
).
- Los nombres de los métodos se declaran en
camelCase
.
PSR-2 Coding style guide
- Usar 4 espacios para la sangría, no utilizar tabulaciones.
- Las líneas deben tener menos de 80 caracteres. Las líneas más largas deberían dividirse en múltiples líneas.
- No debería haber más de una declaración por línea.
- Las palabras clave o reservadas deben estar en minusculas.
null
, true
y false
deben estar en minuscula.
- Debe haber una línea en blanco después de la declaración del
namespace
.
- Debe haber una línea en blanco después de las declaraciones
use
.
- Las palabras clave
extends
e implements
deben declararse en la misma línea que el nombre de la clase.
- La apertura de llaves
{
en las clases y métodos debe ir en la siguiente línea, y la llave de cierre }
debe pasar a la siguiente línea después del cuerpo.
- La visibilidad (
public
, protected
o private
) debe declararse siempre en todas las propiedades y métodos.
- Entre el nombre de las funciones y métodos y los paréntesis
( )
no debe haber espacios en blanco (ejemplo: miFuncion()
).
- En la lista de argumentos, no debe haber un espacio antes de cada coma si debe haber un espacio después de cada coma.
- Los argumentos del método con valores predeterminados deben ir al final de la lista de argumentos.
- La llave de apertura
{
para estructuras de control (ejemplo: if
) deben seguir en la misma línea, y la llave de cierre }
debe pasar a la siguiente línea después del cuerpo.
Ejemplos:
Namespace y use
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
// code
Extends y Implements
class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
// constants, properties, methods
}
Propiedades
class ClassName
{
public $foo = null;
// methods
}
Métodos
public function fooBarBaz($arg1, &$arg2, $arg3 = [])
{
// method body
}
Métodos con argumento en varias lineas
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3 = []
) {
// method body
}
abstract, final y static
<?php
namespace Vendor\Package;
abstract class ClassName
{
protected static $foo;
abstract protected function zim();
final public static function bar()
{
// method body
}
}
Llamadas a métodos y funciones
<?php
// llamada a función
bar($arg2, $arg3);
// llamada a método
$foo->bar($arg1);
// llamada a método estático con argumentos
Foo::bar($arg2, $arg3);
// llamada a método con argumentos multilinea
$foo->bar(
$longArgument,
$longerArgument,
$muchLongerArgument
);
if, elseif y else
<?php
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}
switch, case
<?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 y do while
<?php
do {
// structure body;
} while ($expr);
for
<?php
for ($i = 0; $i < 10; $i++) {
// for body
}
foreach
<?php
foreach ($iterable as $key => $value) {
// foreach body
}
try y catch
<?php
try {
// try body
} catch (FirstExceptionType $e) {
// catch body
} catch (OtherExceptionType $e) {
// catch body
}
Fuente: https://github.com/php-fig/fig-standards