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
}

Namespaces y Clases: DEBEN seguir una PSR "auto carga": [ PSR-0 , PSR-4 ].

 

  • Cada Clase esta en un archivo y esta en un namespace de un nivel.
  • Los nombres de clase deben ser declarados en StudlyCaps

 

 

<?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

  1. Sublime  - Phpcs (Deprecate): https://packagecontrol.io/packages/Phpcs
  2. Sublime - phpfmt: https://packagecontrol.io/packages/phpfmt
  3. Atom - php-cs-fixer: https://atom.io/packages/php-cs-fixer
  4. Atom - php-fmt:      https://atom.io/packages/php-fmt
  5. 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