<?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>Pignatelli.com - programmazione e social media marketing &#187; PHP</title>
	<atom:link href="http://www.pignatelli.com/category/articolo/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pignatelli.com</link>
	<description>Notizie e informazioni su programmazione e social media marketing</description>
	<lastBuildDate>Sun, 03 Oct 2010 15:04:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Un saluto al Virgilio Search Team</title>
		<link>http://www.pignatelli.com/2008/12/23/un-saluto-al-virgilio-search-team/</link>
		<comments>http://www.pignatelli.com/2008/12/23/un-saluto-al-virgilio-search-team/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 10:36:30 +0000</pubDate>
		<dc:creator>Nicola</dc:creator>
				<category><![CDATA[Dal Mondo]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Amici]]></category>
		<category><![CDATA[motore di ricerca]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[Virgilio]]></category>

		<guid isPermaLink="false">http://www.pignatelli.com/?p=684</guid>
		<description><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="Dal Mondo" /><img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="Internet" /><img src="http://www.pignatelli.com/wp-content/uploads/2008/09/site-map-016x016.png" width="16" height="16" alt="" title="News" /><br/>Bene essendo ormai passato il mio ultimo giorno di consulenza presso Matrix posso dire, senza dover poi sentirmi dire grazie, che grande, ecc. che i tre anni passati dentro il gruppo della Search di Virgilio sono stati molto belli. Spesso si parla delle aziende italiane come delle entità che scimmiottano la New Economy americana, che [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="Dal Mondo" /><img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="Internet" /><img src="http://www.pignatelli.com/wp-content/uploads/2008/09/site-map-016x016.png" width="16" height="16" alt="" title="News" /><br/><p style="text-align: justify;"><a href="http://www.pignatelli.com/wp-content/uploads/2008/12/weblink_virgilio.jpg"><img class="alignleft size-medium wp-image-685" style="padding-right: 5pt;" title="Virgilio Search Team" src="http://www.pignatelli.com/wp-content/uploads/2008/12/weblink_virgilio-300x180.jpg" alt="" width="189" height="113" /></a><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Bene essendo ormai passato il mio ultimo giorno di consulenza presso Matrix posso dire, senza dover poi sentirmi dire grazie, che grande, ecc. che i tre anni passati dentro il gruppo della Search di Virgilio sono stati molto belli. Spesso si parla delle aziende italiane come delle entità che scimmiottano la New Economy americana, che sono pronte a copiare tutto ma non sanno creare nulla.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Vi invito a guardare come è cambiata l&#8217;interfaccia del motore di ricerca Virgilio nell&#8217;ultimo anno. Tutto questo è frutto del lavoro di ragazzi in gamba, che pur con i loro difetti, hanno dei pregi e una passione per i loro compiti che ho riscontrato in pochissime persone lungo lo Stivale.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Mi piacerebbe fare i loro nomi, ma la privacy  me lo impedisce, inoltre non vorrei che un giorno per colpa mia  le loro email fossero tempestate di domande assurde o inutili.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Vi dico che se gli parlate scoprirete che sono persone normali, non se la tirano e sono sempre disponibili a dare una mano nell&#8217;ambito tecnologico a chi lo chiede.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Alcuni di loro hanno dei blog, ma non sta a me svelarne gli url, altri non li hanno perchè così indaffarati che non riescono a crearlo; altri ancora sono troppo intenti a raffinare le tecniche SEO sui blog precedenti.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Beh un saluto a tutta la Search, ed anche al super Capo, che nonostante il grado che ricopra è una persona sempre disponibile e che non disdegna momenti di ilarità con i suoi sottoposti.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Bye bye</span></p>
<p style="text-align: justify;"> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.pignatelli.com/2008/12/23/un-saluto-al-virgilio-search-team/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Refactoring &#8211; Lez. 4: Estrazione di codice e eliminazione di variabili temporanee</title>
		<link>http://www.pignatelli.com/2008/12/05/php-refactoring-lez-4-estrazione-di-codice-e-eliminazione-di-variabili-temporanee/</link>
		<comments>http://www.pignatelli.com/2008/12/05/php-refactoring-lez-4-estrazione-di-codice-e-eliminazione-di-variabili-temporanee/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 10:03:26 +0000</pubDate>
		<dc:creator>Nicola</dc:creator>
				<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://www.pignatelli.com/?p=651</guid>
		<description><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="Refactoring" /><br/>Spesso nei metodi di una classe troviamo del codice che può essere riutilizzato in vari punti della stessa, oppure notiamo che messe in quella posizione non danno alcun significato intuitivo.
Un miglioramento della leggibilità dell&#8217;oggetto è estrarre questo gruppo di righe con un significato comune e metterle in un metodo che sarà richiamato ogni volta che [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="Refactoring" /><br/><p style="text-align: justify;"><a href="http://www.pignatelli.com/wp-content/uploads/2008/12/php-logo.png"><img class="size-medium wp-image-657 alignleft" style="padding-right: 5pt;" title="php-logo" src="http://www.pignatelli.com/wp-content/uploads/2008/12/php-logo.png" alt="" width="157" height="82" /></a><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Spesso nei metodi di una classe troviamo del codice che può essere riutilizzato in vari punti della stessa, oppure notiamo che messe in quella posizione non danno alcun significato intuitivo.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Un miglioramento della leggibilità dell&#8217;oggetto è estrarre questo gruppo di righe con un significato comune e metterle in un metodo che sarà richiamato ogni volta che si presenterà la necessità.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Un altro problema è la presenza di variabili temporanee, che non fanno altro che aumentare i rischi di bug e possono essere sostituite da codice autoesplicativo, nella forma di un metodo privato della classe.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Di seguito è fornito un esempio per meglio chiarire il concetto:</span></p>
<p style="text-align: justify;"><span id="more-651"></span></p>
<table style="background-color: #000000;" border="0" cellspacing="1" cellpadding="4">
<tbody>
<tr>
<td style="background-color: #FFEEE6;"><span style="font-size: small; font-family: courier new,courier;">Errato</span></td>
</tr>
<tr>
<td style="background-color: #ffffff;" valign="top">
<p><span style="font-size: small; font-family: courier new,courier;">class Conto {</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function liquidita() {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">$interessi = 0,025;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<br />
 </span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">$totaleCredito = </span><span style="font-size: small; font-family: courier new,courier;">$this-&gt;db-&gt;getRow(1);</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">$creditoDisponibile = $interessi * </span><span style="font-size: small; font-family: courier new,courier;">$totaleCredito;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">return </span><span style="font-size: small; font-family: courier new,courier;">$creditoDisponibile;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">}</span></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"> </p>
<table style="background-color: #000000; height: 530px;" border="0" cellspacing="1" cellpadding="4" width="472">
<tbody>
<tr>
<td style="background-color: #FFEEE6;"><span style="font-size: small; font-family: courier new,courier;">Esatto</span></td>
</tr>
<tr>
<td style="background-color: #ffffff;" valign="top">
<p><span style="font-size: small; font-family: courier new,courier;">class Conto {</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">private $interessi;<br />
 </span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function __construct(</span><span style="font-size: small; font-family: courier new,courier;">$interessi</span><span style="font-size: small; font-family: courier new,courier;">) {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">$this-&gt;setInteressi(</span><span style="font-size: small; font-family: courier new,courier;">$interessi</span><span style="font-size: small; font-family: courier new,courier;">); </span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function </span><span style="font-size: small; font-family: courier new,courier;">setInteressi(</span><span style="font-size: small; font-family: courier new,courier;">$interessi</span><span style="font-size: small; font-family: courier new,courier;">) { </span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">$this-&gt;interessi = </span><span style="font-size: small; font-family: courier new,courier;">$interessi</span><span style="font-size: small; font-family: courier new,courier;">;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function </span><span style="font-size: small; font-family: courier new,courier;">getInteressi(</span><span style="font-size: small; font-family: courier new,courier;">) { </span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">return $this-&gt;interessi</span><span style="font-size: small; font-family: courier new,courier;">;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function liquidita() {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">return </span><span style="font-size: small; font-family: courier new,courier;">$this-&gt;</span><span style="font-size: small; font-family: courier new,courier;">totaleCredito() *</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">$this-&gt;</span><span style="font-size: small; font-family: courier new,courier;">getInteressi(</span><span style="font-size: small; font-family: courier new,courier;">)</span><span style="font-size: small; font-family: courier new,courier;">;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">private function totaleCredito() {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">return </span><span style="font-size: small; font-family: courier new,courier;">$this-&gt;db-&gt;getRow(1);</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">}</span></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Come potete vedere dall&#8217;esempio precedente siamo passati da un metodo con un&#8217;accozzaglia di variabili temporanee, dfra cui una contenente una costante, ad un insieme di semplici metodi autoesplicativi e richiamabili in più punti.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Come esempio può sembrare banale, ma applicato ad un programma complesso vi permette di risolvere ed eliminare molte fonti di bug.</span></p>
<p><br class="spacer_" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pignatelli.com/2008/12/05/php-refactoring-lez-4-estrazione-di-codice-e-eliminazione-di-variabili-temporanee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Refactoring &#8211; Lez. 3: metodi di una classe</title>
		<link>http://www.pignatelli.com/2008/11/12/php-refactoring-lez-3-metodi-di-una-classe/</link>
		<comments>http://www.pignatelli.com/2008/11/12/php-refactoring-lez-3-metodi-di-una-classe/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 11:00:01 +0000</pubDate>
		<dc:creator>Nicola</dc:creator>
				<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://www.pignatelli.com/?p=541</guid>
		<description><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="Refactoring" /><br/>Per quanto riguarda i metodi di una classe, vale anche in questo caso la naming convention esposta in precedenza per le proprietà della classe stessa. Le ripetiamo per comodità qui di seguito:
 

Se composto da singola parola tutto in minuscolo; per esempio valuta();
Se composta da più parole la prima lettera di ciascuna, a partire dalla [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="Refactoring" /><br/><p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Per quanto riguarda i metodi di una classe, vale anche in questo caso la <a title="PHP Refactoring - Lez. 1: proprietà di una classe" href="http://www.pignatelli.com/2008/10/31/php-refactoring-lez-1-proprieta-di-una-classe/">naming convention esposta in precedenza</a> per le proprietà della classe stessa. Le ripetiamo per comodità qui di seguito:<br />
 </span></p>
<ul style="text-align: justify;">
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Se composto da singola parola tutto in minuscolo; per esempio valuta();</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Se composta da più parole la prima lettera di ciascuna, a partire dalla seconda, in maiuscolo, tutte le altre minuscole; per esempio aggiungiElemento();</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Il nome del metodo deve essere autoesplicativo.<br />
 </span></li>
</ul>
<p style="text-align: justify;"><span id="more-541"></span><span style="font-size: small; font-family: arial,helvetica,sans-serif;">In aggiunta a queste regole consideriamo anche le seguenti:</span></p>
<ul>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Se il nome del metodo è composto da più azioni scinderlo in tanti metodi quante sono le azioni;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">La lunghezza del corpo del metodo non deve superare le 40 righe;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Il numero dei parametri non deve superare un massimo di 4;</span></li>
</ul>
<p style="text-align: justify;"><strong><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Nome metodo composto da più azioni</span></strong></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Mettete il caso che nello scrivere il codice di una classe abbiate un metodo con la seguente signature:</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: courier new,courier;">public function controllaImmagazzina($prodotto)</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Il codice del metodo è il seguente:</span></p>
<table style="background-color: #000000;" border="0" cellspacing="1" cellpadding="4">
<tbody>
<tr>
<td style="background-color: #ffffff;" valign="top">
<p><span style="font-size: small; font-family: courier new,courier;">class Magazzino {</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function controllaImmagazzina($prodotto) {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">if ($prodotto==null) {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">return &#8220;prodotto non settato&#8221;;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">} else </span><span style="font-size: small; font-family: courier new,courier;">if (substr($prodotto-&gt;getCodice(), 0, 3)==&#8221;CAT&#8221;) {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">return &#8220;prodotto con vecchia catalogazione&#8221;;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">} else </span><span style="font-size: small; font-family: courier new,courier;">if ($prodotto-&gt;getIngombro()&gt;10) {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">return &#8220;prodotto troppo ingombrante&#8221;;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">$db = new Db(&#8221;mysql&#8221;);</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">$db-&gt;update($prodotto);</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">}</span></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">come potete vedere, abbiamo inserito in un unico metodo azioni che potrebbero tornarci utili anche singolarmente; per questo motivo dobbiamo scindere ogni azione in un nuovo metodo e nel caso ci serva utilizzarle contemporaneamente creiamo un ulteriore metodo che le richiami in sequenza.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Seguendo le indicazioni appena fornite, il codice precedente dovrebbe apparire come segue:</span></p>
<table style="background-color: #000000; text-align: justify;" border="0" cellspacing="1" cellpadding="4">
<tbody>
<tr>
<td style="background-color: #ffffff;" valign="top">
<p><span style="font-size: small; font-family: courier new,courier;">class Magazzino {</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function controlla($prodotto) {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">if ($prodotto==null) {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">return &#8220;prodotto non settato&#8221;;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">} else </span><span style="font-size: small; font-family: courier new,courier;">if (substr($prodotto-&gt;getCodice(), 0, 3)==&#8221;CAT&#8221;) {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">return &#8220;prodotto con vecchia catalogazione&#8221;;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">} else </span><span style="font-size: small; font-family: courier new,courier;">if ($prodotto-&gt;getIngombro()&gt;10) {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">return &#8220;prodotto troppo ingombrante&#8221;;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">return &#8220;&#8221;;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function immagazzina($prodotto) {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">$db = new Db(&#8221;mysql&#8221;);</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">$db-&gt;update($prodotto);</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public prendeInCarico($prodotto) {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">$msg = </span><span style="font-size: small; font-family: courier new,courier;">$this-&gt;controlla($prodotto);</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">if ($msg !== &#8220;&#8221;) {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">echo $msg</span><span style="font-size: small; font-family: courier new,courier;">;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">} else {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">$this-&gt;</span><span style="font-size: small; font-family: courier new,courier;">immagazzina($prodotto);</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">echo &#8220;Presa in carico andata a buon fine&#8221;; </span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">}<br />
 </span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p><br class="spacer_" /></p>
<p><span style="font-size: small; font-family: courier new,courier;">$objProdotto</span><span style="font-size: small; font-family: courier new,courier;"> = new Prodotto();</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">$obj</span><span style="font-size: small; font-family: courier new,courier;">Magazzino</span><span style="font-size: small; font-family: courier new,courier;"> = new Magazzino();</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">$msg = $obj</span><span style="font-size: small; font-family: courier new,courier;">Magazzino</span><span style="font-size: small; font-family: courier new,courier;">-&gt;</span><span style="font-size: small; font-family: courier new,courier;">prendeInCarico($objProdotto)</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">echo $msg;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Riscrivendo il codice lo abbiamo reso più leggibile e riutilizzabile, nel caso volessimo solo controllare un prodotto all&#8217;interno di un altro metodo, o solamente immagazzinare un prodotto che non necessita di controllo.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Analizziamo ora gli altri requisiti.</span></p>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.pignatelli.com/2008/11/12/php-refactoring-lez-3-metodi-di-una-classe/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP Refactoring &#8211; Lez. 2: proprietà array di una classe</title>
		<link>http://www.pignatelli.com/2008/11/11/php-refactoring-lez-2-proprieta-array-di-una-classe/</link>
		<comments>http://www.pignatelli.com/2008/11/11/php-refactoring-lez-2-proprieta-array-di-una-classe/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 08:09:41 +0000</pubDate>
		<dc:creator>Nicola</dc:creator>
				<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://www.pignatelli.com/?p=514</guid>
		<description><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="Refactoring" /><br/>Oggi parleremo delle proprietà composte di una classe, ovvero di proprietà contenenti un array. 
 
Abbiamo visto nella lezione precedente (PHP Refactoring &#8211; Lez. 1: proprietà di una classe) come scrivere le proprietà semplici di una classe.
Per quanto riguarda le proprietà composte valgono le regole di naming convention introdotte nel precedente tutorial, eccetto  i metodi [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="Refactoring" /><br/><p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Oggi parleremo delle proprietà composte di una classe, ovvero di proprietà contenenti un array. <br />
 </span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Abbiamo visto nella lezione precedente (<a title="PHP Refactoring - lez. 1: proprietà di una classe" href="http://www.pignatelli.com/2008/10/31/php-refactoring-lez-1-proprieta-di-una-classe/">PHP Refactoring &#8211; Lez. 1: proprietà di una classe</a>) come scrivere le proprietà semplici di una classe.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Per quanto riguarda le proprietà composte valgono le regole di naming convention introdotte nel precedente tutorial, eccetto  i metodi di accesso alle stesse. Di seguito lo standard da seguire a livello di classe.</span></p>
<p style="text-align: justify;"><span id="more-514"></span><strong><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Metodo addXXX</span></strong></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Per aggiungere un elemento ad una proprietà composta utilizzeremo un metodo con la seguente signature:</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: courier new,courier;">public function addXXX($valore, </span><span style="font-size: small; font-family: courier new,courier;">$chiave=null</span><span style="font-size: small; font-family: courier new,courier;">)</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Dove XXX deve essere sostituito con il nome della proprietà.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Di seguito è fornito un esempio:</span></p>
<table style="background-color: #000000;" border="0" cellspacing="1" cellpadding="4">
<tbody>
<tr>
<td style="background-color: #ffffff;" valign="top">
<p><span style="font-size: small; font-family: courier new,courier;">class Classe {</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">private $alunni;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function addAlunni($valore, $chiave=null) {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">if (is_array($valore)) {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">foreach($valore as $posizione =&gt; $elemento){</span></p>
<p style="padding-left: 120px;"><span style="font-size: small; font-family: courier new,courier;">if ($chiave!=null) {</span></p>
<p style="padding-left: 150px;"><span style="font-size: small; font-family: courier new,courier;">$this-&gt;alunni[$posizione] = </span></p>
<p style="padding-left: 180px;"><span style="font-size: small; font-family: courier new,courier;">$elemento;</span></p>
<p style="padding-left: 120px;"><span style="font-size: small; font-family: courier new,courier;">} else {</span></p>
<p style="padding-left: 150px;"><span style="font-size: small; font-family: courier new,courier;">$this-&gt;alunni[] = $elemento;</span></p>
<p style="padding-left: 120px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">} else if ($chiave == null) {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">$this-&gt;alunni[] = $valore;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">} else {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">$this-&gt;alunni[$chiave] = $valore;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">}</span></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Come si può notare i parametri da passare sono due: il primo obbligatorio, il secondo opzionale.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Non appena entriamo nel metodo <em>addXXX</em> viene controllato se il parametro <em>$valore</em> è un array. in caso affermativo cicliamo su quest&#8217;ultimo, e se il parametro <em>$chiave</em> è null accodiamo gli elementi nella proprietà; se invece <em>$chiave</em> è diverso da <em>null inseriremo il valore $elemento</em><em> nella chiave $posizione</em><em>.</em></span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Nel caso <em>$valore </em>non sia un array e <em>$chiave</em> sia uguale a <em>null</em> inseriremo <em>$valore</em> direttamente nella proprietà <em>$alunni</em>.</span></p>
<p style="text-align: justify;"><span style="font-family: arial,helvetica,sans-serif;">Infine l&#8217;ultimo caso è se il parametro <em>$chiave</em> è valorizzato; in tal caso inseriremo <em>$valore</em> nella posizione <em>$chiave</em> della proprietà <em>$alunni</em> della classe.</span></p>
<p style="text-align: justify;"><strong><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Metodo removeXXX</span></strong></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Per rimuovere un elemento da una proprietà composta utilizzeremo un metodo con la seguente signature:</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: courier new,courier;">public function removeXXX(</span><span style="font-size: small; font-family: courier new,courier;">$chiave=null</span><span style="font-size: small; font-family: courier new,courier;">)</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Dove XXX deve essere sostituito con il nome della proprietà.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Di seguito è fornito un esempio:</span></p>
<table style="background-color: #000000; text-align: justify;" border="0" cellspacing="1" cellpadding="4">
<tbody>
<tr>
<td style="background-color: #ffffff;" valign="top">
<p><span style="font-size: small; font-family: courier new,courier;">class Classe {</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">private $alunni;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function removeAlunni($chiave=null) {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">if (is_array($chiave)) {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">foreach($chiave as $posizione=&gt; $valore){</span></p>
<p style="padding-left: 120px;"><span style="font-size: small; font-family: courier new,courier;">unset($this-&gt;alunni[</span><span style="font-size: small; font-family: courier new,courier;">$valore</span><span style="font-size: small; font-family: courier new,courier;">]);</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">} else if ($chiave == null) {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">$this-&gt;alunni = array();</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">} else {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">unset($this-&gt;alunni[$chiave]);</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">}</span></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Non appena entriamo nel metodo <em>removeXXX</em> viene controllato se il parametro <em>$chiave</em> è un array. in caso affermativo cicliamo su quest&#8217;ultimo, ed eliminiamo tutti gli elementi alle posizioni corrispondenti ai valori contenuti nel parametro del metodo<em>.</em></span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Nel caso <em>$chiave </em>non sia un array ed sia uguale a <em>null</em> resetteremo la proprietà <em>$alunni</em>.</span></p>
<p style="text-align: justify;"><span style="font-family: arial,helvetica,sans-serif;">Infine l&#8217;ultimo caso è se il parametro <em>$chiave</em> è valorizzato; in tal caso elimineremo il valore corrispondente alla posizione <em>$chiave</em> nella </span><span style="font-family: arial,helvetica,sans-serif;">proprietà </span><span style="font-family: arial,helvetica,sans-serif;"><em>$alunni</em> della classe.</span></p>
<p style="text-align: justify;"><strong><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Metodo getXXX</span></strong></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Per recuperare degli elementi da una proprietà composta utilizzeremo un metodo con la seguente signature:</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: courier new,courier;">public function getXXX(</span><span style="font-size: small; font-family: courier new,courier;">$chiave=null</span><span style="font-size: small; font-family: courier new,courier;">)</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Dove XXX deve essere sostituito con il nome della proprietà.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Di seguito è fornito un esempio:</span></p>
<table style="background-color: #000000; text-align: justify;" border="0" cellspacing="1" cellpadding="4">
<tbody>
<tr>
<td style="background-color: #ffffff;" valign="top">
<p><span style="font-size: small; font-family: courier new,courier;">class Classe {</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">private $alunni;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function getAlunni($chiave=null) {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">if (is_array($chiave)) {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">$elementi = array();</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">foreach($chiave as $posizione=&gt; $valore){</span></p>
<p style="padding-left: 120px;"><span style="font-size: small; font-family: courier new,courier;">$elementi[$valore] = $this-&gt;alunni[$valore];</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">return $elementi;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">} else if ($chiave == null) {</span></p>
<p style="padding-left: 90px;"><span style="font-size: small; font-family: courier new,courier;">return $this-&gt;alunni;</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">return $this-&gt;alunni[$chiave];</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">}</span></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Non appena entriamo nel metodo <em>getXXX</em> viene controllato se il parametro <em>$chiave</em> è un array. in caso affermativo cicliamo su quest&#8217;ultimo, ed alla fine ritorniamo un array contenente i valori degli elementi richiesti<em>.</em></span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Nel caso <em>$chiave </em>non sia un array ed sia uguale a <em>null</em> restituiremo tutta la proprietà <em>$alunni</em>.</span></p>
<p style="text-align: justify;"><span style="font-family: arial,helvetica,sans-serif;">Infine l&#8217;ultimo caso corrisponde al parametro <em>$chiave</em> valorizzato; in tal caso restituiremo il valore corrispondente alla posizione <em>$chiave</em> nella proprietà <em>$alunni</em> della classe.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Chiudiamo la lezione assemblando tutto il codice finora scritto e applicandolo ad un piccolo esempio, chiarificatore:</span></p>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.pignatelli.com/2008/11/11/php-refactoring-lez-2-proprieta-array-di-una-classe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Refactoring &#8211; Lez. 1: proprietà di una classe</title>
		<link>http://www.pignatelli.com/2008/10/31/php-refactoring-lez-1-proprieta-di-una-classe/</link>
		<comments>http://www.pignatelli.com/2008/10/31/php-refactoring-lez-1-proprieta-di-una-classe/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 08:53:18 +0000</pubDate>
		<dc:creator>Nicola</dc:creator>
				<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[proprietà classe]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://www.pignatelli.com/?p=436</guid>
		<description><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="Refactoring" /><br/>Quando scriviamo una classe ognuno di noi usa delle sue convezioni.
Io consiglio di utilizzare le seguente sulle proprietà di una classe:

Se composta da singola parola tutto in minuscolo; per esempio $nome;
Se composta da più parole la prima lettera di ciascuna, a partire dalla seconda, in maiuscolo, tutte le altre minuscole; per esempio $nomeAziendaItaliana;
Se rappresenta una [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="Refactoring" /><br/><p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Quando scriviamo una classe ognuno di noi usa delle sue convezioni.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Io consiglio di utilizzare le seguente sulle proprietà di una classe:</span></p>
<ul style="text-align: justify;">
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Se composta da singola parola tutto in minuscolo; per esempio $nome;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Se composta da più parole la prima lettera di ciascuna, a partire dalla seconda, in maiuscolo, tutte le altre minuscole; per esempio $nomeAziendaItaliana;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Se rappresenta una costante composta da singola parola scriverla tutta in maiuscolo; per esempio ELEMENTI;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Se abbiamo una costante composta da più parole scriverla tutta in maiuscolo con un trattino fra le parole; per esempio ELEMENTI_PER_RIGA</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Il nome della variabile deve essere autoesplicativo<br />
 </span></li>
</ul>
<p style="text-align: justify;"><span id="more-436"></span><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Tutte le proprietà di una classe sono private ed è possibile accedervi tramite i metodi getXXX e setXXX, il cui livello di accesso deve essere public, in modo che si possa accedere allo stato interno dell&#8217;oggetto da qualunque punto. Al posto di XXX mettiamo il nome della proprietà.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Di seguito è fornito un esempio per meglio chiarire il concetto:</span></p>
<table style="background-color: #000000;" border="0" cellspacing="1" cellpadding="4">
<tbody>
<tr>
<td style="background-color: #FFEEE6;"><span style="font-size: small; font-family: courier new,courier;">Errato</span></td>
<td style="background-color: #FFEEE6;"><span style="font-size: small; font-family: courier new,courier;">Esatto</span></td>
</tr>
<tr>
<td style="background-color: #ffffff;" valign="top">
<p><span style="font-size: small; font-family: courier new,courier;">class Prova {</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public $nomeclasse;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">private $mia_x1;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">const costante_della_classe;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">const pagine;</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">}</span></p>
</td>
<td style="background-color: #ffffff;" valign="top">
<p><span style="font-size: small; font-family: courier new,courier;">class Prova {</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">private $nomeClasse;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">private $miaDataDiNascita;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">const COSTANTE_DELLA_CLASSE;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">const PAGINE;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function setNomeClasse($nome) {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">$this-&gt;nomeClasse = $nome;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function getNomeClasse() {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">return $this-&gt;nomeClasse;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">}</span></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Ma perchè dobbiamo fare tutto questo ? Le proprietà di una classe rappresentano lo stato dell&#8217;istanza di un oggetto, quindi si deve accedere solamente tramite i metodi pubblici, deputati a scatenare le azioni per la modifica.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Un esempio reale è la lampadina: noi siamo interessati al suo stato, ovvero incandescente o fredda, ma agiamo su quest&#8217;ultimo tramite le azioni accendere e/o spegnere, le quali rappresentano i nostri metodi.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Per quanto riguarda l&#8217;accesso delle proprietà in PHP 5 possiamo usare un trucchetto, possibile grazie alle funzioni magiche __set e __get.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Se non vogliamo usare direttamente nel codice le funzioni getXXX e setXXX possiamo fare come nel seguente esempio:</span></p>
<table style="background-color: #000000; text-align: justify;" border="0" cellspacing="1" cellpadding="4">
<tbody>
<tr>
<td style="background-color: #ffffff;" valign="top">
<p style="text-align: justify;"><span style="font-size: small; font-family: courier new,courier;">class Prova {</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">private $_nomeClasse;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function __set($nome, $valore) {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">call_user_func(array($this, &#8220;set&#8221;.ucwords($nome)), $valore);</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function __get($nome) {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">call_user_func(array($this, &#8220;get&#8221;.ucwords($nome)));</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function setNomeClasse($nome) {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">$this-&gt;_nomeClasse = $nome;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">public function getNomeClasse() {</span></p>
<p style="padding-left: 60px;"><span style="font-size: small; font-family: courier new,courier;">return $this-&gt;_nomeClasse;</span></p>
<p style="padding-left: 30px;"><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">}</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">$obj = new Prova();</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">$obj-&gt;nomeClasse = &#8216;prova&#8217;;</span></p>
<p><span style="font-size: small; font-family: courier new,courier;">echo $obj-&gt;nomeClasse;</span></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Il trucco consiste nel seguire una certa nomenclatura nei nomi ed usufruire delle funzioni magiche del linguaggio.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Il nome che utilizziamo al di fuori della classe non è altro che la proprietà, ma senza l&#8217;underscore come primo carattere. Non esistendo una variabile di classe con tale nome, il PHP lancia la funzione __set o __get, se esistenti, passandogli nel primo caso nome proprietà e valore da immagazzinare, nel secondo caso solo il nome.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Requisito essenziale per il funzionamento è che:</span></p>
<ul style="text-align: justify;">
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">la variabile fittizia utilizzata al di fuori dell&#8217;oggetto segua la naming convenction della proprietà interna alla classe, ad esclusione dell&#8217;underscore che non deve essere presente;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">esistano i metodi setXXX e getXXX per la proprietà richiamata;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">la variabile interna da utilizzare sia semplice, in quanto con un array il funzionamento non sarà come lo si desidera.</span></li>
</ul>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Nel caso dell&#8217;array vedremo quali metodi utilizzare in un prossimo articolo.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Un grazie ad Enrico per alcuni utili suggerimenti nella stesura del codice.</span></p>
<p style="text-align: justify;"><br class="spacer_" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pignatelli.com/2008/10/31/php-refactoring-lez-1-proprieta-di-una-classe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Refactoring &#8211; Introduzione</title>
		<link>http://www.pignatelli.com/2008/10/29/php-refactoring-introduzione/</link>
		<comments>http://www.pignatelli.com/2008/10/29/php-refactoring-introduzione/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 13:17:06 +0000</pubDate>
		<dc:creator>Nicola</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[codice]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://www.pignatelli.com/?p=426</guid>
		<description><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="PHP" /><br/>Refactoring, ovvero ottimizzazione del codice esistente.
Troppo spesso come programmatori dobbiamo mettere mano a codice sporco, scritto male e pieno di bug, con il rischio che l&#8217;eliminazione di un errore generi altri bug a catena.
Le soluzioni sono due:

Prendere un bel foglio bianco e pianificare da zero l&#8217;applicativo;
individuare la possibilità di suddividere il programma in porzioni autonome [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="PHP" /><br/><p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Refactoring, ovvero ottimizzazione del codice esistente.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Troppo spesso come programmatori dobbiamo mettere mano a codice sporco, scritto male e pieno di bug, con il rischio che l&#8217;eliminazione di un errore generi altri bug a catena.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Le soluzioni sono due:</span></p>
<ul style="text-align: justify;">
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Prendere un bel foglio bianco e pianificare da zero l&#8217;applicativo;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">individuare la possibilità di suddividere il programma in porzioni autonome e riscrivere il codice di quest&#8217;ultime, in modo da migliorarlo senza apportare macro cambiamenti istantanei.</span></li>
</ul>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Il primo caso è quello preferito da ogni sviluppatore, ma purtroppo per esigenze contingenti (budget, tempistiche di messa online) il meno praticabile.</span></p>
<p style="text-align: justify;"><span id="more-426"></span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">A questo punto siamo costretti ad intraprendere la strada della seconda soluzione, ovvero il refactoring.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Ma quali vantaggi può portarci intraprendere questo passo? Perchè, filosoficamente parlando, tutte le novità sono belle ed interessanti, ma alla fine bisogna sempre fare un raffronto fra costi e benefici.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Direi che i maggiori benefici possono essere qui riassunti:</span></p>
<ul style="text-align: justify;">
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Minor numero di righe di codice;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Individuazione di uno stile univoco di programmazione;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Scomposizione del codice in patterns riutilizzabili ben consolidati;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Leggibilità del codice;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Testing automatico del proprio codice.</span></li>
</ul>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Ricordatevi che il refactoring non è un metodo che si esaurisce in due minuti, e che non viene eseguito con cambiamenti massivi, ma è granulare e lungo nel tempo.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Concludiamo l&#8217;articolo introducendo i principali caposaldi del refactoring che andremo ad analizzare:</span></p>
<ul style="text-align: justify;">
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Incapsulamento interno dello stato di un oggetto;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Riduzione del codice di una classe;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Eliminazione di codice non autoesplicativo;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Naming convention per proprietà e metodi della classe;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Estrazione di metodi;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Semplificazione di istruzioni condizionali e ripetitive;</span></li>
</ul>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Buon proseguimento nelle prossime puntate.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pignatelli.com/2008/10/29/php-refactoring-introduzione/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Singleton Pattern in PHP</title>
		<link>http://www.pignatelli.com/2008/10/06/singleton-pattern-in-php/</link>
		<comments>http://www.pignatelli.com/2008/10/06/singleton-pattern-in-php/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 13:05:25 +0000</pubDate>
		<dc:creator>Nicola</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://www.pignatelli.com/?p=284</guid>
		<description><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="PHP" /><br/>Requisiti : 

nessuno
 


 Conoscenze PHP consigliate:
 

La proprietà static applicata alle variabili;
Sintassi versione 5;
 
L&#8217;istruzione require_once;
Programmazione ad oggetti.
 

Capita spesso che durante l&#8217;esecuzione di uno script si utilizzi ripetutamente la stessa classe.
Per ogni richiamo dell&#8217;istanza dell&#8217;oggetto viene allocata memoria. Un esempio è la classe che gestisce la connessione al database, utilizzata più volte durante [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="PHP" /><br/><p><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">Requisiti : </span></p>
<ul>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">nessuno<br />
 </span></li>
</ul>
<p><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;"><br />
 Conoscenze PHP consigliate:<br />
 </span></p>
<ul>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">La proprietà static applicata alle variabili;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">Sintassi versione 5;<br />
 </span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">L&#8217;istruzione require_once;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">Programmazione ad oggetti.<br />
 </span></li>
</ul>
<p style="margin-bottom: 0cm; text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Capita spesso che durante l&#8217;esecuzione di uno script si utilizzi ripetutamente la stessa classe.</span></p>
<p style="margin-bottom: 0cm; text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Per ogni richiamo dell&#8217;istanza dell&#8217;oggetto viene allocata memoria. Un esempio è la classe che gestisce la connessione al database, utilizzata più volte durante l&#8217;elaborazione.</span></p>
<p style="margin-bottom: 0cm; text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Come fare allora per risparmiare la memoria allocata ?</span></p>
<p style="margin-bottom: 0cm; text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Fortunatamente esiste un filone della programmazione che si occupa di quest&#8217;argomento: dare una soluzione ai problemi che quotidianamente si presentano ai programmatori, in modo da risparmiare tempo e non dover ogni volta reinventare “la ruota”.</span></p>
<p style="margin-bottom: 0cm; text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">L&#8217;oggetto che utilizzeremo per la soluzione al problema dell&#8217;allocazione esponenziale di memoria è il Singleton Pattern.</span></p>
<p style="margin-bottom: 0cm; text-align: justify;"><span id="more-284"></span></p>
<p style="margin-bottom: 0cm; text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Come esempio creiamo una classe HelloWorld che sarà richiamata tramite il suo Singleton in ogni punto del programma.</span></p>
<p style="margin-bottom: 0cm; text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">I file che andremo ad utilizzare sono i seguenti:</span></p>
<ul>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">HelloWolrd.php</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">SingletonHelloWorld.php</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">test</span><span style="font-size: small; font-family: arial,helvetica,sans-serif;">SingletonHelloWorld</span><span style="font-size: small; font-family: arial,helvetica,sans-serif;">.php</span></li>
</ul>
<p>
]]></content:encoded>
			<wfw:commentRss>http://www.pignatelli.com/2008/10/06/singleton-pattern-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP &#8211; Classe per gestire il layout delle pagine</title>
		<link>http://www.pignatelli.com/2008/09/16/php-classe-per-gestire-il-layout-delle-pagine/</link>
		<comments>http://www.pignatelli.com/2008/09/16/php-classe-per-gestire-il-layout-delle-pagine/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 16:15:46 +0000</pubDate>
		<dc:creator>Nicola</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://www.pignatelli.com/?p=216</guid>
		<description><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="PHP" /><br/>Requisiti di sistema :

Web Server installato; 
PHP versione 5.0 o superiore; 

Conoscenze PHP consigliate:

Sintassi versione 5;
L&#8217;istruzione include; 
Programmazione ad oggetti;

Le conoscenze richieste in questo tutorial potrebbero non servire nella creazione del codice, in quanto si cerca di dare informazioni tali da poter &#8220;far camminare&#8221; il creatore delle pagine da solo, ma si consiglia lo stesso [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="PHP" /><br/><p><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">Requisiti di sistema :</span></p>
<ul>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">Web Server installato; </span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">PHP versione 5.0 o superiore; </span></li>
</ul>
<p><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">Conoscenze PHP consigliate:</span></p>
<ul>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">Sintassi versione 5;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">L&#8217;istruzione include; </span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">Programmazione ad oggetti;</span></li>
</ul>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Le conoscenze richieste in questo tutorial potrebbero non servire nella creazione del codice, in quanto si cerca di dare informazioni tali da poter &#8220;far camminare&#8221; il creatore delle pagine da solo, ma si consiglia lo stesso un&#8217;infarinatura generale.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Questo tutorial è stato testato sotto un Server Linux e Windows, con il PHP versione 5.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Vi spiegherò come creare una classe che ci permette di separare il layout, ovvero lo strato presentazione, dalla logica dell’applicativo.   I file che andremo a creare sono i seguenti:</span></p>
<ul style="text-align: justify;">
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Template.class.php;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif;">TemplateException.class.php;</span></li>
<li style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">File .html presenti nella directory template.</span></li>
</ul>
<p><span id="more-216"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pignatelli.com/2008/09/16/php-classe-per-gestire-il-layout-delle-pagine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP &#8211; Creazione di una contatore per il sito</title>
		<link>http://www.pignatelli.com/2008/07/30/tutorial-php-creazione-di-una-contatore-per-il-sito/</link>
		<comments>http://www.pignatelli.com/2008/07/30/tutorial-php-creazione-di-una-contatore-per-il-sito/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 11:53:15 +0000</pubDate>
		<dc:creator>Nicola</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[contatore]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.pignatelli.com/?p=35</guid>
		<description><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="PHP" /><br/>Requisiti :
 

Server con Apache installato;
Server con PostGreSql (Sql Server) installato; 


 Conoscenze PHP consigliate:
 

Le variabili Session;
L&#8217;istruzione include;
Conoscenza dell&#8217;SQL;

Questo tutorial è stato testato sotto un Server Linux, con il PHP 4 e con l&#8217;SQL Server PostGreSql, ma nulla vieta di provarlo sotto Windows, e se si vuole usare l&#8217;SQL Server MySQL basta sostituire le [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.pignatelli.com/wp-content/uploads/2008/09/arrow-right-016x016.png" width="16" height="16" alt="" title="PHP" /><br/><p><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">Requisiti :<br />
 </span></p>
<ul>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">Server con Apache installato;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">Server con PostGreSql (Sql Server) installato; </span></li>
</ul>
<p><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;"><br />
 Conoscenze PHP consigliate:<br />
 </span></p>
<ul>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">Le variabili Session;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">L&#8217;istruzione include;</span></li>
<li><span style="font-size: small; font-family: arial,helvetica,sans-serif; color: #3366ff;">Conoscenza dell&#8217;SQL;</span></li>
</ul>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Questo tutorial è stato testato sotto un Server Linux, con il PHP 4 e con l&#8217;SQL Server PostGreSql, ma nulla vieta di provarlo sotto Windows, e se si vuole usare l&#8217;SQL Server MySQL basta sostituire le funzioni proprie del PHP per il PostGreSql con quelle del MySql (per il manuale di riferimento vai su www.php.net).</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Se volete avere un&#8217;interfaccia per Linux per editare i vostri database dovete andare su http://www.greatbridge.org/project/phppgadmin/projdisplay.php.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">In questo tutorial vi spiegherò come creare un contatore per il proprio sito.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Dovete creare un database in PostGreSql con nome contatore contenente un solo campo, chiamato visite, di tipo numerico (int8), appartenente alla tabella conteggio.</span></p>
<p style="text-align: justify;"><span id="more-35"></span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Poi dovete creare una funzione chiamata IncrementaContatore, a cui vengono passati tre parametri, lo username e la password per interfacciarsi al PostGreSql ed il nome del database da utilizzare.</span></p>
<p style="text-align: justify;"><span style="font-size: small; font-family: arial,helvetica,sans-serif;">Di seguito è inserito il codice da inserire nel caso volessimo avere un contatore nelle nostre pagine:</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pignatelli.com/2008/07/30/tutorial-php-creazione-di-una-contatore-per-il-sito/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

