PHP
Standard
Recommendation
Recomendación estándar de PHP
(G9-E2) Asesorar Limitada
2018


Ing. Yurley Sanchez
Son los estándares de programación propuestos por el php-fig *
* php-fig: Grupo de interoperatibilidad para Frameworks PHP.
PSR


Objetivo:
- Revisar mejor el código.
- Entenderlo el código en caso de modificación.
- Mantenimiento del código.
- Facilidad de trabajar en equipo.
¿Qué son?:
Hoy sé lo que hace este código, mañana sólo Dios lo sabe

Evitar
PSR-1 Basic Coding Standard - PHP-FIG
PSR-2 Coding Style Guide - PHP-FIG
Estándar básico de codificación
Comprende los elementos de codificación estándar que se deben considerar para garantizar un alto nivel de interoperabilidad técnica entre códigos PHP compartidos.
Guía de estilo de codificación
Considera PSR-1 y su objetivo es reducir la fricción cognitiva al escanear códigos de diferentes autores. Lo hace al enumerar un conjunto compartido de reglas y expectativas sobre cómo formatear el código PHP.
https://en.wikipedia.org/wiki/PHP_Standard_Recommendation
PSR1
https://www.php-fig.org/psr/psr-1/
RESUMEN PSR-1
-
Los archivos DEBEN usar solo etiquetas largas <?php y cortas <?=
-
Los archivos DEBEN usar solo UTF-8 sin BOM para el código PHP.
-
Los archivos deben o bien declarar símbolos (clases, funciones, constantes, etc.) o causar efectos secundarios (por ejemplo, generar una salida, cambiar la configuración de .ini, etc.) pero no debe hacer ambos.
-
Los espacios de nombres y las clases DEBEN seguir una PSR "auto carga": [ PSR-0 , PSR-4 ].
-
Los nombres de clase deben ser declarados en StudlyCaps.
-
Las constantes de clase DEBEN declararse en MAYUSCULAS con separadores de subrayado.
-
Los nombres de los métodos DEBEN declararse en camelCase.
<?= ?>
<?php ?>
Largas
Cortas
En PHP se debe hacer uso de las etiquetas Largas o cortas.
no debera usar las otras variaciones de la etiqueta
El código PHP DEBE usar solo UTF-8 sin BOM.
https://stackoverflow.com/questions/21289157/set-encoding-of-file-to-utf8-with-bom-in-sublime-text-3
* Por defecto los editores de codigo como sublime tex traen UTF-8 sin BOM
BOM: son la serie de caracteres 0xef 0xbb 0xbf
DEBERÍA
* Declarativo (clases, funciones, constantes, etc.)
no causar otros efectos secundarios
* Ejecutora de la lógica, con efectos secundarios,
NO DEBERÍA hacer ambas cosas.
https://stackoverflow.com/questions/26059277/psr-1-2-3-side-effects-rule-example
<?php
// side effect: change ini settings
ini_set('error_reporting', E_ALL);
// side effect: loads a file
include "file.php";
// side effect: generates output
echo "<html>\n";
// declaration
function foo()
{
// function body
}
<?php
// PHP 5.3 and later:
namespace Vendor\Model;
class Foo
{
}
Las constantes de clase DEBEN declararse en mayúsculas con separadores de subrayado.
<?php
namespace Vendor\Model;
class Foo
{
const VERSION = '1.0';
const DATE_APPROVED = '2012-06-01';
}
No hay una recomendacino especifica sobre el nombre de las propiedades, se puede hacer uso de:
$StudlyCaps
$camelCaseo
$under_score
Cualquiera que sea la convención de nomenclatura que se use, DEBERÁ aplicarse de manera coherente dentro de un alcance razonable.
Los nombres de los métodos DEBEN declararse en camelCase()
<?php
class Persona {
public $nombre;
public $apellido;
public $edad;
public function saludarPersona(){
return 'Hola, soy ' . $this->nombre;
}
public function obtenerNombre(){
return $this->nombre;
}
public function obtenerEdad(){
return $this->edad;
}
}
?>
PSR2
https://www.php-fig.org/psr/psr-2/
RESUMEN PSR-2
-
El código DEBE seguir una "guía de estilo de codificación" PSR [ PSR-1 ].
-
El código DEBE usar 4 espacios para sangrar, no pestañas.
-
NO DEBE haber un límite estricto en la longitud de la línea; el límite suave DEBE ser 120 caracteres; las líneas DEBERÍAN tener 80 caracteres o menos.
-
DEBE haber una línea en blanco después de la namespacedeclaración, y DEBE haber una línea en blanco después del bloque de usedeclaraciones.
-
La apertura de las llaves para las clases DEBE ir a la siguiente línea, y las llaves de cierre DEBEN
pasar a la siguiente línea después del cuerpo. -
Las llaves de apertura para los métodos DEBEN pasar a la siguiente línea, y las llaves de cierre DEBEN pasar a la siguiente línea después del cuerpo.
-
La visibilidad DEBE declararse en todas las propiedades y métodos; abstracty finalDEBE eclararse antes de la visibilidad; staticDEBE declararse después de la visibilidad.
-
Las palabras clave de la estructura de control DEBEN tener un espacio después de ellas; el étodo y las llamadas de función NO DEBEN.
-
Las llaves de apertura para estructuras de control DEBEN seguir en la misma línea, y las llaves de cierre DEBEN pasar a la siguiente línea después del cuerpo.
-
Abrir paréntesis para las estructuras de control NO DEBE tener un espacio después de ellos, y el cierre de paréntesis para las estructuras de control NO DEBE tener un espacio antes.
<?php
namespace Vendor\Package;
use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class Foo extends Bar implements FooInterface
{
public function sampleMethod($a, $b = null)
{
if ($a === $b) {
bar();
} elseif ($a > $b) {
$foo->bar($arg1);
} else {
BazClass::bar($arg2, $arg3);
}
}
final public static function bar()
{
// method body
}
}
Codigo de Ejemplo Rapido
Notese:
* El llamado al namespace
* La linea de separacion
* la carga en orden alfabetico
* la declaración de la clase
* la declaración del metodo
Acontinuación se presenta un ejemplo de codigo en php
- Todos los archivos PHP DEBEN usar el final de línea Unix LF (avance de línea).
- Todos los archivos PHP DEBEN terminar con una sola línea en blanco.
- no debe haber etiqueta de cierre ?> en los archivos que solo contengan PHP.
-
No debe haber un limite estricto de longitud de linea
- Suave: 120 caracteres
- no deberian tener mas de 80 caracteres
- No debe haber espacios en blaco al finalizar una linea
- Se pueden agregar líneas en blanco para mejorar la legibilidad e indicar bloques de código relacionados .
- NO DEBE haber más de una declaración por línea.
<?php
for($i = 0; $i < 10; $i++)
{
if($i%2==0)
echo "Flipflop";
}
<?php
for ($i = 0; $i < 10; $i++) {
if ($i%2 == 0) {
echo "Flipflop";
}
}
For
If
<?php
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}
switch
<?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;
}
<?php
$a = 10;
$otherVar = 20;
$third = 30;
<?php
$a = 10;
$otherVar = 20;
$third = 30;
<?php
namespace NS\Something;
use \OtherNS\C;
use \OtherNS\B;
use \OtherNS\A;
use \OtherNS\D;
$a = new A();
$b = new C();
$d = new D();
<?php
namespace NS\Something;
use \OtherNS\A;
use \OtherNS\C;
use \OtherNS\D;
$a = new A();
$b = new C();
$d = new D();
<?php
class A {
function a(){
return 10;
}
}
<?php
class A
{
public function a()
{
return 10;
}
}
Extenciones
- Sublime - Phpcs (Deprecate): https://packagecontrol.io/packages/Phpcs
- Sublime - phpfmt: https://packagecontrol.io/packages/phpfmt
- Atom - php-cs-fixer: https://atom.io/packages/php-cs-fixer
- Atom - php-fmt: https://atom.io/packages/php-fmt
- VsCode formatter: https://marketplace.visualstudio.com/items?itemName=Sophisticode.php-formatter
A continuación se presentan los enlaces para agregar exenciones a editores de codigos que facilitan el estilado de las PSR.
PSR
By Yurley Sánchez
PSR
- 457