Cosa sono le PSR-1: le Basic Coding Standard

psr-1 PHP Standards Recommendations

PSR-1, o Basic Coding Standard, è un set di linee guida stabilite dal PHP Framework Interoperability Group (PHP-FIG).

Le PSR-1 sono state pensate e formalizzate per garantire un elevato livello di interoperabilità tecnica tra codice PHP condiviso.

Il Basic Coding Standard è specificato con punti chiave che specificano modalità standard di scrittura del codice.

5 minuti

Se sei uno sviluppatore, se scrivi codice in linguaggio PHP, o se vuoi imparare a scriverlo, è fondamentale che tu impari anche le “PHP Standard Recommendation“. PSR sono le linee guida su come standardizzare la stesura del codice PHP in modo da rendere più facilmente condivisibile il codice nella comunità di programmatori in linguaggio PHP.

L’importanza di conoscere le basi

Prima che venissero scritte e diffuse le raccomandazioni PSR, non esisteva una modalità condivisa per scrivere codice programma, ognuno usava le proprie convenzioni e il proprio stile. Molte aziende, o gruppi di lavoro, si inventarono degli standard propri, linee guida per la scrittura di codice caratteristiche di una specifica azienda o gruppo di lavoro.

FIG. Framework Interoperability Group

Le raccomandazioni PSR sono state scritte dal FIG, che sta per Framework Interoperability Group. In precedenza si chiamava “PHP Standards Group“. Il FIG è nato in occasione del PHP[TEK] 2009, incontro in cui emerse fortemente l’esigenza di creare uno standard condiviso di scrittura codice programma.

I membri del FIG sono rappresentanti di diversi framework PHP, piattaforme di Content Management System, sviluppatori di package, tool, ecc… FIG nasce anche dall’esigenza di avere un gruppo eterogeneo che rappresenti l’intera comunità PHP e non solo un gruppo ristretto di sviluppatori.

L’obiettivo fondante del gruppo è quello di definire degli standard di scrittura, in riferimento a un elenco definito di aspetti della programmazione PHP, come gli autoload, lo stile di scrittura, la definizione di interfacce, ecc…

In questo articolo vedremo le linee guida degli standard necessari per garantire un elevato livello di interoperabilità del codice PHP condiviso tra sviluppatori, cioè le PSR-1

File

Tag PHP

Per la scrittura di codice PHP, i file devono contenere tag lunghi, come <?php ?>, o tag abbreviati/corti <?= ?>. Non devono essere utilizzati altre varianti di tag. Ciò vuol dire che il codice PHP che viene scritto in un file, deve essere evidenziato da tag di apertura codice come <?php, o <?=, e da tag di chiusura codice ?>, o ?>.

Codifica dei caratteri

Il codice programma PHP deve essere scritto utilizzando solo codifica UTF-8, senza BOM.

Effetti collaterali

Un file contenente codice PHP, deve:

  • dichiarare nuovi simboli (classi, funzioni, costanti, ecc.) e non causare altri effetti collaterali;
  • oppure eseguire la logica con effetti collaterali;

ma non deve fare entrambe le cose.

Con l’espressione “effetti collaterali” si intende l’esecuzione di logica programma non direttamente correlata alla dichiarazione di classi, funzioni, costanti, ecc., semplicemente includendo il file.

“Effetti collaterali” includono, ma non sono limitati a: generazione di output, uso esplicito di require o include, connessione a servizi esterni, modifica delle impostazioni ini, emissione di errori o eccezioni, modifica di variabili globali o statiche, lettura da o scrittura su un file e così via.

Nell’esempio qui sotto, sono riportate delle dichiarazioni che possono portare conseguenze non desiderate, cioè potrebbero causare errori o comportamenti inaspettati. Sono quindi esempi da evitare:

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

Nell’esempio successivo riportiamo un esempio di dichiarazione di funzione solo nel caso in cui la funzione non esiste già:

<?php
// declaration
function foo()
{
    // function body
}

// conditional declaration is *not* a side effect
if (! function_exists('bar')) {
    function bar()
    {
        // function body
    }
}

Namespace e Classi

La definizione dei Namespace e delle classi deve seguire la logica descritta in un PSR “autoloading”: [PSR-0, PSR-4]. Questo vuol dire che ogni classe è in un file, e il file contiene una sola classe. Inoltre la classe si deve dichiarare all’interno di un namespace di almeno un livello.

Le classi devono essere definite assegnando un nome che segue una notifica definita in StudlyCaps.

Il codice PHP scritto in versione dalla 5.3, o successive, deve utilizzare namespace formali.

<?php
// PHP 5.3 and later:
namespace Vendor\Model;

class Example
{
}

Il codice scritto per la versione 5.2.x, o precedente, DOVREBBE utilizzare la convenzione di pseudo-namespace con il prefisso Vendor_ per i nomi delle classi.

<?php
// PHP 5.2.x and earlier:
class Vendor_Model_Example
{
}

Costanti, Proprietà a Metodi

Con il termine classe, ci si riferisce alle classi, alle interfacce e alle caratteristiche.

Costanti 

Le costanti definite in una classe, devono essere dichiarate con nomi scritti in maiuscolo. Il nome può essere composto da più parole che però devono essere separate dal carattere di sottolineatura. Ad esempio:

<?php
namespace Vendor\Model;

class Example
{
    const VERSION = '10.11';
    const DATE_APPROVED = '2024-12-27';
}

Proprietà 

La versione PSR-1 di raccomandazioni, evita intenzionalmente qualsiasi indicazione riguardante le modalità di scrittura dei nomi di proprietà $StudlyCaps$camelCase, o $under_score.

Qualunque convenzione di denominazione utilizzata, deve essere applicata in modo coerente, a livello Vendor, di Package, di Classe e Metodo.

Metodi 

I nomi dei metodi devono essere scritti in camelCase().

Autore