<?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; Refactoring</title>
	<atom:link href="http://www.pignatelli.com/category/articolo/php/refactoring-php-tutorial/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>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>
	</channel>
</rss>

