<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>psr1 Archivi - Cesare Bordi | Innovation Manager &amp; Back-end Developer</title>
	<atom:link href="https://www.cesarebordi.it/tag/psr1/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.cesarebordi.it/tag/psr1/</link>
	<description>Innovare con soluzioni software efficaci e gioco di squadra</description>
	<lastBuildDate>Mon, 15 Jun 2020 13:39:51 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.3</generator>

<image>
	<url>https://www.cesarebordi.it/wp-content/uploads/2016/02/CB-logo-88x88.png</url>
	<title>psr1 Archivi - Cesare Bordi | Innovation Manager &amp; Back-end Developer</title>
	<link>https://www.cesarebordi.it/tag/psr1/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>PSR-1: regole per la scrittura di codice PHP</title>
		<link>https://www.cesarebordi.it/psr-1-regole-scrittura-codice-php/</link>
					<comments>https://www.cesarebordi.it/psr-1-regole-scrittura-codice-php/#respond</comments>
		
		<dc:creator><![CDATA[cesarebordi]]></dc:creator>
		<pubDate>Mon, 15 Jun 2020 10:08:11 +0000</pubDate>
				<category><![CDATA[Articoli]]></category>
		<category><![CDATA[Lezioni]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php-fig]]></category>
		<category><![CDATA[phpfig]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[programmazione ad oggetti]]></category>
		<category><![CDATA[psr]]></category>
		<category><![CDATA[psr-1]]></category>
		<category><![CDATA[psr1]]></category>
		<category><![CDATA[standard]]></category>
		<guid isPermaLink="false">https://www.cesarebordi.it/?p=1170</guid>

					<description><![CDATA[<p>PSR-1 è lo standard promosso da PHP-FIG per definire delle regole per la scrittura di codice PHP così da facilitarne la lettura e la comprensione.</p>
<p>L'articolo <a href="https://www.cesarebordi.it/psr-1-regole-scrittura-codice-php/">PSR-1: regole per la scrittura di codice PHP</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>PSR-1</strong> è lo standard promosso da <strong><a rel="noreferrer noopener" href="https://www.php-fig.org/" target="_blank">PHP-FIG</a></strong> (<strong>PHP Framework Interop Group</strong>) che vuole definire le <strong>regole per la scrittura di codice PHP</strong> così da <strong>facilitare la lettura e la comprensione del codice</strong> da parte della community degli sviluppatori.</p>



<p>Prima di procedere con la lettura della lezione sullo <strong>standard PSR1</strong> consiglio di leggere le <a href="#note">note</a> in fondo alla pagina. Inoltre, nella sezione &#8220;<a href="https://www.cesarebordi.it/category/articoli/lezioni/">Lezioni</a>&#8220;, è possibile trovare altro materiale sugli standard <strong>PHPFIG</strong>.</p>



<h2 class="wp-block-heading">PSR-1: in breve</h2>



<ul><li>I <strong>file PHP DEVONO usare solo i tag <code>&lt;?php</code> e <code>&lt;?=</code></strong>,</li><li><strong>DEVONO usare solo la codifica UTF-8</strong> priva di BOM,</li><li><strong>DOVREBBERO dichiarare classi, funzioni, costanti</strong>, &#8230;<strong> OPPURE DOVREBBERO eseguire altri tipi di azioni logiche</strong> come generare output, modificare parametri di configurazione del php.ini, includere file &#8230; ma NON DOVREBBERO fare entrambe le cose.</li><li>I <strong>Namespaces e i Class Names DEVONO seguire lo standard per “autoloading” PSR-4</strong>: una sola classe in un solo file, namespace di almeno un livello indicante il vendor-name.</li><li>I <strong>Class Names DEVONO essere dichiarati in <code>StudlyCaps</code></strong>.</li><li>Le <strong>costanti DEVONO essere dischiarate in maiuscolo utilizzando l&#8217;underscore come separatore</strong>.</li><li>I <strong>nomi dei metodi DEVONO essere dichiarati in <code>camelCase</code></strong>.</li></ul>



<h2 class="wp-block-heading">PSR-1: files</h2>



<h3 class="wp-block-heading">PHP Tags</h3>



<p>Il codice PHP deve essere dichiarato attraverso i tag <code>&lt;?php ?&gt;</code> oppure gli short-echo <code>&lt;?= ?&gt;</code> tags. NON DEVE utilizzare altre varianti di tag dichiarativi (es: <code>&lt;? ?&gt;</code>).</p>



<h3 class="wp-block-heading">Codifica dei caratteri</h3>



<p>Il file <strong>PHP DEVE utilizzare solo la codifica UTF-8</strong> ed essere privo di <a href="https://it.wikipedia.org/wiki/Byte_Order_Mark" target="_blank" rel="noreferrer noopener">BOM</a>.</p>



<h3 class="wp-block-heading">Dichiarazioni ed effetti collaterali (side effects)</h3>



<p>Un file <strong>DOVREBBE dichiarare nuovi &#8220;simboli&#8221;</strong> (classi, funzioni, costanti, &#8230;) senza causare altri &#8220;effetti collaterali&#8221;<strong> OPPURE DOVREBBE eseguire una logica con effetti collaterali</strong>, <strong>MA NON DOVREBBE fare entrambe le cose</strong>.</p>



<p>Lo standard spiega che l&#8217;espressione &#8220;<strong>effetti collaterali</strong>&#8221; (side effects) indica l&#8217;esecuzione di una logica non direttamente correlata alla dichiarazione di classi, funzioni, costanti, ecc, ma correlata direttamente all&#8217;inclusione del file stesso. </p>



<p>Vengono poi fatti alcuni esempi di &#8220;effetti collaterali&#8221; a titolo esemplificativo: generazione di output, uso esplicito di <code>require</code> o <code>include</code>, connessione a servizi esterni, modifica di parametri del php.ini, generazione di errori o eccezioni, modifica di variabili statiche o globali, lettura/scrittura di file, &#8230;</p>



<p>Ecco un esempio di file non conforme allo standard con la coopresenza di dichiarazioni ed &#8220;effetti collaterali&#8221;.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
&lt;?php
// effetto collaterale: cambio ini setting
ini_set('error_reporting', E_ALL);

// effetto collaterale: carico un file
include &quot;file.php&quot;;

// effetto collaterale: genero output
echo &quot;&lt;html&gt;\n&quot;;

// dichiarazione una funzione
function foo() {
    // function body
}
</pre></div>


<p>Il seguente esempio mostra un file conforme allo standard contenete solo delle dichiarazioni:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
&lt;?php
// dichiarazione una funzione
function foo() {
    // function body
}

// la dichiarazione condizionale non è un effetto collaterale.
if (! function_exists('bar')) {
    function bar() {
        // function body
    }
}

</pre></div>


<h2 class="wp-block-heading">PSR-1: namespace e class names</h2>



<p>I <strong>namespaces</strong> ed i <strong>class names</strong> <strong>DEVONO essere conformi ad allo standard per l&#8217;autoloading</strong> <a rel="noreferrer noopener" href="https://www.php-fig.org/psr/psr-4/" target="_blank">PSR-4</a>.</p>



<p>Ciò significa che <strong>ogni classe DEVE essere dichiarata in un file dedicato</strong> e <strong>DEVE trovarsi in un Namespace di almeno un livello indicante il vendor-name</strong>, in pratica l&#8217;indicazione dello sviluppatore.</p>



<p>I <strong>class names DEVONO essere dichiarati in <code>StudlyCaps</code></strong>.</p>



<p>ll codice scritto da PHP 5.3 in avanti <strong>DEVE utilizzare namespaces formali</strong>.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
&lt;?php
// PHP 5.3 e successivi:
namespace Vendor\Model;

class Foo {
  // Class body
}
</pre></div>


<p>Il codice scritto per PHP 5.2 e versioni precedenti DOVREBBE usare la convenzione pseudo-namespacing con prefissi Vendor_ nei nomi delle classi.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
&lt;?php
// PHP 5.2.x e versioni precedenti:
class Vendor_Model_Foo {
  // Class body
}

</pre></div>


<h2 class="wp-block-heading">PSR-1: costanti di classe, proprietà e metodi</h2>



<p>Il termine “class” si usa qui in senso più ampio per riferirsi a tutte le classi, le interfacce ed i traits.</p>



<h3 class="wp-block-heading">Costanti</h3>



<p>Le <strong>costanti di classe DEVONO essere dischiarate in maiuscolo utilizzando l&#8217;underscore come separatore</strong>. Personalmente applico questa regola a tutte le costanti comprese quelle definite con define().</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
&lt;?php
namespace Vendor\Model;

class Foo {
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}
</pre></div>


<h3 class="wp-block-heading">Proprietà</h3>



<p>Lo standard evita intenzionalmente di fornire consigli riguardanti l&#8217;uso dei nomi di prorpietà <code>$StudlyCaps</code>, <code>$camelCase</code>, or <code>$under_score</code> property names.</p>



<p>Qualunque sia la convenzione di denominazione utilizzata DOVREBBE essere applicato in modo coerente.</p>



<h3 class="wp-block-heading">Metodi</h3>



<p>I nomi dei <strong>metodi DEVONO essere dichiarati in <code>camelCase()</code></strong>.</p>



<hr class="wp-block-separator"/>



<h2 class="wp-block-heading">PSR1 nel lavoro di tutti i giorni</h2>



<p>Il nuovo <strong>framework CoreBox</strong> che stiamo sviluppando alla <a rel="noreferrer noopener" href="https://www.communicationbox.it" target="_blank">Communication Box </a>adererisce perfettamente allo <strong>standard PSR1</strong>. Questo facilita notevolmente lo sviluppo poiché ogni componente del team trova sempre una certa familiarità nel leggere il codice scritto dai colleghi.</p>



<hr class="wp-block-separator"/>



<h4 class="wp-block-heading" id="note"><strong>Note</strong></h4>



<p>Quando si legge un documento del PHP-FIG le parole DEVE (<strong><code>MUST</code></strong>), NON DEVE (<strong><code>MUST NOT</code></strong>), RICHIESTO (<strong><code>REQUIRED</code></strong>), POTRÀ (<strong><code>SHALL</code></strong>),  NON POTRÀ (<strong><code>SHALL NOT</code></strong>), DOVREBBE (<strong><code>SHOULD</code></strong>),  NON DOVREBBE (<strong><code>SHOULD NOT</code></strong>), RACCOMANDATO (<strong><code>RECCOMANDED</code></strong>), PUÒ (<strong><code>MAY</code></strong>) e OPZIONALE (<strong><code>OPTIONAL</code></strong>) vanno interpretati secondo quanto descritto nel documento <a rel="noreferrer noopener" href="http://www.ietf.org/rfc/rfc2119.txt" target="_blank">RFC 2119</a>.</p>



<p>Lo stile <strong></strong><strong><code>StudlyCaps</code></strong>, noto anche come PascalCase, impone che la prima lettera di ogni parola sia in maiuscolo.<strong> </strong>Una stringa in questo stile<strong> deve iniziare sempre con la lettera maiuscola</strong>.</p>



<p>Lo stile <strong></strong><strong><code>camelCase</code></strong>, proprio come in un cammello, impone che le gobbe siano solo in mezzo. Una stringa in questo stile <strong>deve iniziare sempre con la lettera minuscola</strong>.</p>
<p>L'articolo <a href="https://www.cesarebordi.it/psr-1-regole-scrittura-codice-php/">PSR-1: regole per la scrittura di codice PHP</a> sembra essere il primo su <a href="https://www.cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cesarebordi.it/psr-1-regole-scrittura-codice-php/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
