PSR (PHP, Standard, Requeriments) Norma de codificación de los elementos que se requieren para garantizar un alto nivel técnico de código Php. PSR-0 Autoloading Standard Es una forma sencilla de cómo cargar clases automaticamente, cargando unicamente las clases que necesitemos. Simplemente tenemos que incluir el fichero que contenga nuestra función de carga en el lugar donde se vayan a instanciar las clases. A continuación mostraremos un ejemplo: Por un lado los ficheros claseA.php, claseB.php, claseC.php que contienen nuestras clases. clasea.php | claseb.php | clasec.php class A{ | class B{ | class C{ | | ………. ….. } ….. | } | } Por otro lado nuestro fichero de carga: autoload.php <?php function my_autoloader($class) { require_once(“ruta_de_nuestras_clases/class".strtolower($class).".php"); } spl_autoload_register('my_autoloader'); //siendo: //$clase : el nombre de la clase que instanciamos en el index.php // “ruta_de_nuestra_clase/class” : la ruta de directorios para llegar a nuestros ficheros de clases. X ej: /directorio/base/clases/class //”strotolower($class)”: pasa a minusculas la variable $clase. Por último en nuestro fichero index.php realizaremos un require_once de nuestro fichero autoload.php y cuando necesitemos una clase con instanciarla nos será suficiente, ya que autoload.php se cargará de cargarla. Index.php <?php require_once(autoload.php); //si quiero usar por ejeplo la clase A y la clase B, solo tengo que //instanciarlas. $objetoA = new A(); $objetoB = new B(); PSR-1 Basic Coding Standard a) Archivos: a-1) etiqueta php: Siempre usar <?php ?> o <?= ?> a-2) Codificación de caracteres: en php se usa siempre UTF-8 a-3) Efectos segundarios: Separación de la estructura (clases, funciones…) de la lógica de negocio. b) Espacio de nombres y nombres de clases: b-1) Cada clase debe de estar en un fichero independiente. b-2) El nombre de la clase debe seguir notación StudlyCaps (minusculas, sin espacios y la primera letra de cada palabra en mayuscula) Ej: class NombreDeLaClase { …….. } c) Constantes de clases, métodos y propiedades: c-1) Constantes: Siempre en mayusculas y separadas por guiones bajos. Ej: const FECHA_DE_NACIMIENTO = “2012-03-03”; c-2) Métodos: los nombres de los métodos deben declararse en notación camelCase (minusculas, sin espacios y la primera letra de cada palabra en mayuscula menos la primera palabra). Ej: Public function metodoDeEjemplo() { …. } PSR-2 Coding Style Guide Este amplia y extiende el estandar PSR-1 a) General a-1) Ficheros: todos los ficheros deben acabar con una línea en blanco y la etiqueta “?>” se debe omitir en ficheros que contengan solo codigo php. a-2) Líneas: líneas de no mas de 80 caracteres, líneas en blanco entre sentencias del código para mejorar la legibilidad y no debe haber mas de una sentencia por línea. a-3) Indentación: usar 4 espacios en blaco en lugar de tabulación. a-4) palabras clave: (true, false, null) siempre en minúsculas. b) Clases propiedades y métodos b-1) Extensiones e implementaciones: extend y implements deben declararse en la misma línea de la clase y las llaves de la clase en líneas diferentes. Ej class NombreClase exteds ClasePadre { … } b-2) Propiedades: - Visibilidad: debe ser declarada en todas las propiedades. - var: no debe ser usada para declarar una propiedad. - No mas de una propiedad por sentencia. - No usar en los nombres de las propiedades guiones bajos para indicar si son privados o protegidos. Ej: Class NombreClase { Public/protected/private propiedad; } b-3) Métodos: - Visibilidad: siempre debe estar declarada. - No se debe usar guión bajo para indicar si son privados o protegidos. - Las llaves { } en lineas distintas - Sin espacios en blanco entre la apertura y cierre del paréntesis. Ej: Public function metodoDeEjemplo($a, $b) { …….. } b-4) Argumentos de los métodos: - Sin espacios en blanco antes de la coma y con espacios en blanco después de la coma. - Los argumentos con valor en la función se colocan al final de los argumentos. Ej: Public function metodoDeEjemplo($a, $b, $c=1) { …….. } b-5) Palabras abstract, final y static: - Final y abstract antes de la declaración de la visibilidad. - Static después de la declaración de la visibilidad Ej: Public Class { abstract public function miFuncion(); public static function miFuncionDos(); } b-6) Llamadas a métodos y funciones: Sin espacios en blaco: entre el nombre del método y el paréntesis de apertura, después del paréntesis de apertura, antes del paréntesis de cierre y en la lista de argumentos antes de la coma. Con espacios en blanco: después de cada coma. Ej: $objeto->metodoEjemplo($a, $b, $c); c) Estructuras de control: Sin espacios en blanco: después del paréntesis de apertura y antes del paréntesis de cierre. Con espacios en blanco: después de la palabra clave de la estructura de control, entre el paréntesis de cierre y la estructura de control. Las llaves de cierre “}” en línea diferente al código. Ej: If ($variable = 0) { //código } Otro Ej: for ($i = 0; $i < $n; $i++;) { //codigo } PSR-3 Logger Interface El objetivo principal es permitir a todas las librerías usar el objeto “Psr\Log\LoggerInterface” y escribir con él de manera simple y universal. El corazón de la especificación es una interfaz para objetos Logger. Esta interfaz expone ocho métodos para el manejo de mensajes de diferente gravedad y un genérico log () método que puede aceptar un nivel de gravedad arbitraria. Los ocho niveles de gravedad soportados por PSR-3 se basan en RFC 5424 , y se describen a continuación: Emergencia - el sistema es inutilizable Alerta - se requiere una acción inmediata Críticos condiciones críticas Error - Errores que no requieren de atención inmediata, pero deben ser controlados Advertencia - acontecimientos inusuales o indeseables que no son errores Note - eventos normales pero significativas Info - eventos interesantes Depuración - información detallada para propósitos de depuración Cada uno de los métodos de registro acepta un mensaje, que debe ser una cadena o un objeto con un __toString () método. Un argumento adicional acepta una matriz, que puede darse a proporcionar información contextual para el mensaje de registro. Una explicación completa de estos métodos y parámetros se puede encontrar en la especificación PSR-3 . Para más información : https://github.com/php-fig/log http://www.sitepoint.com/logging-with-psr-3-to-improve-reusability/ PSR-4 Improved Autoloading (mejora de carga automática) Describe una especificación para la carga automática de clases. Se puede utilizar en adición de otra especificación de carga automática de clases como PSR-0. Algunas especificaciones: - El nombre de la clase debe tener nombre de clase de terminación. - Los guiones no tienen un significado especial en cualquier parte del nombre de clase completo.