Sunteți pe pagina 1din 4

###Estndares de programacin en PHP (PSR0, PSR1, PSR2 y PSR3)

####PSR-1 - Estndar bsico de estilos de cdigo.

Orientado al contenido de los ficheros PHP y a los nombres de las clases y mtodos.

El objetivo es garantizar un alto nivel tcnico de interoperabilidad entre el


cdigo PHP.

- **DEBEN** usarse nicamente las etiquetas `<?php`y <?=`

- **DEBE** usarse slo UTF-8 without BOM para cdigo PHP

- En un fichero deberan declararse o bien estructuras y smbolos (clases,


funciones, constantes, etc...) o bien partes de la lgica secundaria (informes,
configuracin, etc..) pero **no deberan** hacer las dos cosas.

- Los Namespaces y las clases **DEBEN** cumplir el estndar PSR-4.

- Los nombres de las clases **DEBEN** utilizar la notacin `StudlyCaps`.


class MySqlBuilder extends Builder {...}
class CreateUsersTable extends Migration {...}

- Las constantes de las clases **DEBEN** declararse en MAYSCULAS usando guiones


bajos como separadores.
const VERSION = '1.0';
const DATE_APPROVED = '2012-06-01';

- Los nombres de los mtodos **DEBEN** declararse en notacin `camelCase`. (Ej:


`getColumnListing()`, `compileTableExists()`)
public function hasTable($table){...}
public function getAuthPassword(){...}

- Para los nombres de las propiedades no se define una recomendacin concreta. A


excepcin de que la convencin que se elija se mantenga para todo el proyecto,
clase o mtodo.

**Nota:** `StudlyCaps` es una notacin en la que se alternan maysculas y


minsculas por algn patrn concreto. En `camelCase` se escribe la primera letra de
cada palabra con maysculas (Habitualmente la primera letra de todas suele ir en
minsculas). En `snake_case' se separan las palabras sustituyendo los espacios por
guiones bajos. En en este estndar `StudlyCaps` y `camelCase` se diferencian
nicamente en el uso de la primera letra en minsculas para `camelCase`.

####PSR-2 - Gua de estilo de cdigo.

Orientado en cmo dar formato al cdigo PHP.


El objetivo es el de reducir la dificultad cuando se lee cdigo de diferentes
autores.

- El cdigo **DEBE** seguir el estndar PSR-1.

- El cdigo **DEBE** usar 4 espacios como indentacin, no tabuladores.

> Nota: Utilizar slo los espacios, y no mezclar espacios con tabuladores, ayuda a
evitar problemas con diffs, parches, historiales y anotaciones. El uso de los
espacios tambin facilita a ajustar la alineacin entre lneas.

- No hay un lmite estricto en la longitud de las lneas. El lmite **DEBE** estar


en 120 caracteres; las lneas deberan tener preferblemente 80 caracteres o menos.

- NO DEBE haber espacios en blanco al final de las lneas que no estn vacas.

- PUEDEN aadirse lneas en blanco para mejorar la lectura del cdigo y para
indicar bloques de cdigo que estn relacionados.

- NO DEBE haber ms de una sentencia por lnea.

- **DEBE** haber una lnea en blanco despus de la declaracin del `namespace`, y


**DEBE** haber una lnea en blanco despus del bloque de declaraciones `use`.
DEBE haber un `use` por declaracin.

<?php namespace Curso\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesCommands;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;

abstract class Controller extends BaseController {...}

- Las llaves de apertura de las clases **DEBEN** ir en la lnea siguiente, y las


llaves de cierre **DEBE** ir en la lnea siguiente al cuerpo de la clase.

class HomeController extends Controller


{
public function __construct()
{
$this->middleware('auth');
}
}

- Las palabras clave `extends` e `implements` DEBEN declararse en la misma lnea


del nombre de la clase.

- La lista de `implements` PUEDE ser dividida en mltiples lneas, donde las lneas
subsiguientes sern indentadas una vez. Al hacerlo, el primer elemento de la lista
DEBE estar en la lnea siguiente, y DEBE haber una sola interfaz por lnea.

abstract class AbstractMySQLDriver implements


Driver,
ExceptionConverterDriver,
VersionAwarePlatformDriver
{
....
}

- Las llaves de apertura de los mtodos **DEBEN** ir en la lnea siguiente, y las


llaves de cierre **DEBEN** ir en la lnea siguiente al cuerpo del mtodo.

public function run()


{
// Crear los datos
\DB::table('users')->insert(array(
'name' => 'Juanan',
'email'=>'jatubio@gmail.com',
'password'=>\Hash::make('clave')
));
}
- La visibilidad **DEBE** declararse en todas las propiedades y mtodos; `abstract`
y `final` **DEBEN** declararse antes de la visibilidad; `static` DEBE declararse
despus de la visibilidad.

La palabra clave `var` NO DEBE ser usada para declarar una propiedad.
NO DEBE declararse ms de una propiedad por sentencia.
Los nombres de los mtodos y propiedades NO DEBERAN usar un guin bajo como
prefijo para indicar si son privados/as o protegidos/as.
Los nombres de mtodos NO DEBEN estar declarados con un espacio despus del
nombre del mtodo. La llave de apertura DEBE situarse en su propia lnea, y la
llave de cierre DEBE ir en la lnea siguiente al cuerpo del mtodo.
NO DEBE haber ningn espacio despus del parntesis de apertura, y NO DEBE
haber ningn espacio antes del parntesis de cierre.

abstract protected function doInitialize();


public static function fromString($itemValue) {...}

- Las de PHP DEBEN estar en minsculas. Las constantes de PHP `true`, `false` y
`null` DEBEN estar en minsculas.

- Las palabras clave de las estructuras de control **DEBEN** tener un espacio


despus de ellas, las llamadas a los mtodos y las funciones NO DEBEN tenerlo.

- Las llaves de apertura de las estructuras de control DEBEN estar en la misma


lnea, y las de cierre DEBEN ir en la lnea siguiente al cuerpo.

- Los parntesis de apertura en las estructuras de control NO DEBEN tener un


espacio despus de ellos, y los parntesis de cierre NO DEBEN tener un espacio
antes de ellos.

####PSR-4 - Estndar de Autocarga.

Orientado a los nombres de los Namespaces, Clases y Ficheros. El objetivo es


facilitar la carga automtica de clases.
- Las rutas completas de los Namespaces **DEBEN** tener la estructura
Proveedor\Namespace\NombreDeLaClase (VendorName\Namespace\ClassName)

Por ejemplo:
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

Proveedor: Illuminate
Namespace: Database\Migrations
Nombre de la Clase: Blueprint y Migration

- Todas las rutas **DEBEN** tener un Proveedor (Vendor Name).


- Los Namespaces pueden estar compuestos de todos los Sub-Namespaces que se desee.
- Todas las rutas **DEBEN** acabar en un Nombre de Clase (Class Name).
- Los guiones bajos no tienen ningn significado especial (modificacin sobre PSR-
0).
- Se pueden combinar maysculas y minsculas.
- Todos los nombres de clase **DEBEN** usar un estilo 'case-sensitive'.

Cada namespace puede tener tantos sub-namespaces como se quiera.


Los nombres de los namespaces o clases deben ser separados por un guion bajo (_).
Todos los archivos deben tener la extensin .php.
Los nombres de los namespaces o clases deben ser ordenadas alfabticamente.
- See more at: http://www.codejobs.biz/es/blog/2013/02/19/estandares-de-
codificacion-en-php-psr0-psr1-psr2-y-psr3#sthash.Qp7UsC9B.dpuf

###Ms informacin:
<a href="https://styde.net/laravel-5/">Curso de Laravel 5 en espaol desde
cero</a>: <a href="https://styde.net/curso-de-laravel-5-que-es-psr-4-y-uso-de-los-
namespaces/">Introduccin: PSR-4 y Namespaces</a>.
[php-fig - Grupo de interoperatibilidad para Frameworks PHP](http://www.php-
fig.org)
[Estndar PSR-1](http://www.php-fig.org/psr/psr-1/)
[Estndar PSR-2](http://www.php-fig.org/psr/psr-2/)
[Estndar PSR-3](http://www.php-fig.org/psr/psr-3/)
[Estndar PSR-4](http://www.php-fig.org/psr/psr-4/)
[Ejemplos de implementacin de PSR-4](http://www.php-fig.org/psr/psr-4/examples/)

S-ar putea să vă placă și