<?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>PHPBlog.it &#187; variabili</title>
	<atom:link href="http://phpblog.it/tag/variabili/feed/" rel="self" type="application/rss+xml" />
	<link>http://phpblog.it</link>
	<description>Solo un altro blog targato WordPress</description>
	<lastBuildDate>Mon, 30 Jan 2012 10:36:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Semplici tips sempre utili</title>
		<link>http://phpblog.it/2008/05/13/semplici-tips-sempre-utili/</link>
		<comments>http://phpblog.it/2008/05/13/semplici-tips-sempre-utili/#comments</comments>
		<pubDate>Tue, 13 May 2008 06:00:19 +0000</pubDate>
		<dc:creator>Davide Borsatto</dc:creator>
				<category><![CDATA[dalla rete]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[$$]]></category>
		<category><![CDATA[anonymous functions]]></category>
		<category><![CDATA[continue]]></category>
		<category><![CDATA[espressione ternaria]]></category>
		<category><![CDATA[funzioni anonime]]></category>
		<category><![CDATA[lambda calculus]]></category>
		<category><![CDATA[return]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[variabili]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/05/13/semplici-tips-sempre-utili/</guid>
		<description><![CDATA[Ecco alcuni suggerimenti che possono sempre tornare utili nella programmazione di tutti i giorni. Noi ve ne proponiamo alcuni, voi siete esortati a raccontarne altri&#8230; Espressione ternaria: $a = ($var == 1) ? 'pippo' : 'pluto'; Tra parentesi la condizione, il valore dopo &#8220;?&#8221; è quello restituito in caso la condizione sia vera, il valore [...]]]></description>
			<content:encoded><![CDATA[<p>Ecco alcuni suggerimenti che possono sempre tornare utili nella programmazione di tutti i giorni. Noi ve ne proponiamo alcuni, voi siete esortati a raccontarne altri&#8230;</p>
<p><span id="more-112"></span></p>
<p><strong>Espressione ternaria</strong>:</p>
<pre>
$a = ($var == 1) ? 'pippo' : 'pluto';</pre>
<p>Tra parentesi la condizione, il valore dopo &#8220;?&#8221; è quello restituito in caso la condizione sia vera, il valore dopo i &#8220;:&#8221; nel caso sia falsa.</p>
<p><strong><em>return</em> è un prezioso amico:</strong></p>
<pre>
if ($a == 1)
{
  return true;
}
else
{
  return false;
{</pre>
<p>diventa</p>
<pre>
return ($a == 1);</pre>
<p>Inoltre è utile per gestire il flusso all&#8217;interno delle funzioni, al posto di usare ad esempio dei blocchi if lunghissimi, basta usare <em>return</em> per interrompere la funzione in un determinato caso. Vale anche per <em>continue</em>, che all&#8217;interno dei loop (for, while, do&#8230;while, foreach) interrompe l&#8217;iterazione corrente per passare all&#8217;eventuale successiva.</p>
<p><strong>Variabile o funzione?</strong><br />
In PHP non c&#8217;è un vero e proprio modo per avere delle <a href="http://en.wikipedia.org/wiki/Anonymous_function">funzioni anonime</a> (vedere &#8220;<a href="http://en.wikipedia.org/wiki/Lambda_Calculus">lambda calculus</a>&#8220;), ma ci sono alcuni modi per ottenere qualcosa di simile. Il primo consiste nel chiamare una variabile col nome di una funzione:</p>
<pre>
$function = "phpinfo";
$function();</pre>
<p>Questo codice eseguirà la funzione phpinfo. Pensiamo al vantaggio che si può avere questa tecnica ad esempio nel passaggio di parametri da una funzione, o in molti altri casi. Ma con questo codice creiamo soltanto un collegamento mnemonico ad una funzione, non la assegniamo alla variabile realmente. Per ottenere questo risultato si può usare:</p>
<pre>
$somma = create_function('$a, $b','return $a + $b;');
echo $somma(1,2);</pre>
<p>La prima stringa sono le variabili da passare alla funzione, la seconda è la funzione stessa. In questo caso è inutile, però in alcune circostanze il suo utilizzo porta molti vantaggi.</p>
<p><strong>Variabili variabili:</strong><br />
Ovvero variabili che variano. In questo caso l&#8217;esempio chiarisce bene il concetto.</p>
<pre>
$var = 'message';
$$var = 'Hello, World!';
echo $message;</pre>
<p>Produrra l&#8217;output &#8220;Hello, World!&#8221;.<br />
Questo perché utilizzando il simbolo $$ PHP lo vedrà come &#8220;la variabile dal nome uguale al contenuto alla variabile indicata&#8221;.</p>
<p>Voi cosa dite? Conoscete altri tips come questi su PHP, o &#8220;trucchetti&#8221; di altri linguaggi che vedreste bene e utili importati anche nel nostro linguaggio preferito?</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/05/13/semplici-tips-sempre-utili/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Controllo delle variabili</title>
		<link>http://phpblog.it/2008/03/11/controllo-delle-variabili/</link>
		<comments>http://phpblog.it/2008/03/11/controllo-delle-variabili/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 06:00:49 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[dalla rete]]></category>
		<category><![CDATA[isset]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[variabili]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/03/11/controllo-delle-variabili/</guid>
		<description><![CDATA[Via PhpBuilder leggo un intervento interessante sul controllo delle variabili e sul Ternary Conditional Operator che con una singola linea di codice evita dei fastidiosi controlli. Il fatto di eseguire i corretti controlli sulle variabili può spesso essere visto come una perdita di tempo, questo metodo di procedere lascia nella maggior parte dei casi falle [...]]]></description>
			<content:encoded><![CDATA[<p>Via <a href="http://www.phpbuilder.com/columns/scross99_20080305.php3" title="PHPBuilder.com">PhpBuilder</a> leggo un intervento interessante sul controllo delle variabili e sul <em>Ternary Conditional Operator</em> che con una singola linea di codice evita dei fastidiosi controlli.</p>
<p><span id="more-58"></span> Il fatto di eseguire i corretti controlli sulle variabili può spesso essere visto come una perdita di tempo, questo metodo di procedere lascia nella maggior parte dei casi falle aperte nelle applicazioni che perdono dunque affidabilità in termini di sicurezza.</p>
<p>Tuttavia eseguire un semplice quanto importante controllo su una variabile $_GET, $_POST, $_SESSION è questione di una linea di codice:</p>
<p>CONDIZIONE ? VALORE SE TRUE : VALORE SE FALSE</p>
<p>Un semplice esempio può essere il seguente:</p>
<pre><code>$id = isset($_GET['id']) ? $_GET['id'] : false;</code></pre>
<p>In una singola riga si fanno diverse operazioni: innanzitutto con <em>isset()</em> si verifica l&#8217;esistenza della variabile, se il valore ottenuto è true si assegna il valore a $id, in caso contrario il valore assegnato sarà false. Chiaramente sarà utile verificare successivamente il tipo del dato che ci aspettiamo prima di utilizzarlo.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/03/11/controllo-delle-variabili/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>La questione dei tipi primitivi</title>
		<link>http://phpblog.it/2008/02/12/php-non-e-fortemente-tipizzato/</link>
		<comments>http://phpblog.it/2008/02/12/php-non-e-fortemente-tipizzato/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 06:00:34 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[phpblog]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tipi]]></category>
		<category><![CDATA[variabili]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/02/12/php-non-e-fortemente-tipizzato/</guid>
		<description><![CDATA[Sappiamo tutti (oppure lo scoprite ora) che PHP non è un linguaggio fortemente tipizzato. Questo cosa vuol dire? Significa che non è necessario dichiarare il tipo di una variabile perchè essa possa gestire un particolar tipo di dato. In questo modo potremmo assegnare a $numero il valore 2 oppure &#8220;due&#8221; alla stessa maniera. Nei linguaggi [...]]]></description>
			<content:encoded><![CDATA[<p>Sappiamo tutti (oppure lo scoprite ora) che <strong>PHP non è un linguaggio fortemente tipizzato</strong>. Questo cosa vuol dire? Significa che <strong>non è necessario dichiarare il tipo di una variabile</strong> perchè essa possa gestire un particolar tipo di dato. In questo modo potremmo assegnare a <strong>$numero</strong> il valore <em>2</em> oppure &#8220;<em>due</em>&#8221; alla stessa maniera. Nei linguaggi fortemente tipizzati (C, Java&#8230;) è obbligatorio dichiarare il tipo di una variabile prima di assegnarle un valore, valore che chiaramente deve rispettare il tipo specificato.</p>
<p><span id="more-27"></span>Questo non significa certo che PHP non rispetti il <strong>concetto di tipo</strong>, ogni valore che possiamo assegnare ad una variabile ha un tipo che possiamo verificare attraverso delle utili <a href="http://it.php.net/manual/it/ref.var.php" title="http://it.php.net/manual/it/ref.var.php">funzioni per la gestione delle variabili</a>. Avremo quindi la possibilità di utilizzare is_bool(), is_integer(), is_string()&#8230;per verificare il tipo di una variabile passata come parametro, in caso positivo il valore di ritorno sarà <em>true</em>.</p>
<p>Effettuare <strong>il controllo del tipo di una varibile torna particolarmente importante quando si ha a che fare con gli argomenti di metodi e funzioni</strong>, casi in cui bisogna prestare particolare attenzione al codice che si scrive. Vediamo un esempio. Immaginiamo di estrarre delle informazioni di configurazione da un file XML, l&#8217;elemento &lt;resolvedomains&gt; specifica all&#8217;applicazione se provare o meno ad eseguire il reverse DNS di un IP.<br />
<code><br />
&lt;settings&gt;<br />
&lt;resolvedomains&gt;false&lt;/resolvedomains&gt;<br />
&lt;settings&gt;<br />
</code></p>
<p>La stringa &#8220;false&#8221; viene letta dall&#8217;appliccazione e passata ad un metodo chiamato <em>outputAddress()</em> che si occupa di visualizzare i dati di un determinato IP.</p>
<p>[php]<br />
function outputAddresses($resolve) {<br />
foreach($this-&gt;addresses as $address) {<br />
print $address;<br />
if ($resolve) {<br />
print &#8220;(&#8220;. gethostbyaddr($address) .&#8221;)&#8221;;<br />
}<br />
print &#8220;\n&#8221;;<br />
}<br />
}<br />
[/php]</p>
<p>Il metodo <em>outputAddresses()</em> non fa altro che iterare su un array di indirizzi IP mostrandoli uno ad uno, nel caso in cui $resolve sia true il metodo restituisce anche il dominio assieme all&#8217;IP. Vediamo una porzione di codice che potrebbe essere chiamata da questo metodo:<br />
<code><br />
$settings = simplexml_load_file("settings.xml");<br />
$manager = new AddressManager();<br />
$manager-&gt;outputAddresses($settings-&gt;resolvedomains);</code></p>
<p>Questo codice non si comporta come ci si aspetterebbe: passando la stringa &#8220;false&#8221; al metodo <em>outputAddress()</em> <strong>trascuriamo l&#8217;assunzione implicita che il metodo fa riguardo all&#8217;argomento passato</strong>. Infatti il metodo si aspetta un valore di tipo booleano (true o false) ma la stringa &#8220;false&#8221; corrisponde al valore true in un test. Questo è dato dal fatto che PHP esegue un cast di una stringa non vuota al valore booleano true in un test if. Di conseguenza:<br />
<code><br />
if ("false") {<br />
//..<br />
}<br />
</code></p>
<p>è equivalente a<br />
<code><br />
if (true) {<br />
//..<br />
}</code></p>
<p>Esistono diverse strade per risolvere questo problema, quella più metodica e sicura richiede di modificare il metodo <em>outputAddress()</em>  per fare in modo che sia pronto ad aspettarsi il corretto tipo di dato riferito all&#8217;argomento <em>$resolv</em>.</p>
<p>[php]<br />
function outputAddresses($resolve) {<br />
if (!is_bool($resolve)) {<br />
die(&#8220;outputAddress() richiede un argomento di tipo booleano\n&#8221;);<br />
}<br />
}<br />
[/php]</p>
<p>Un approccio di questo tipo <strong>obbliga chi utilizza il metodo a fornire l&#8217;argomento $resolv nel tipo di dato corretto</strong> evitando problemi di ogni sorta. Detto questo sta al programmatore considerare il potenziale impatto che l&#8217;utilizzo di tipi inaspettati potrebbe avere sulla propria applicazione. Non pensate di lasciare nulla al caso, chi userà le vostre classi non può leggere quello che avete in mente quando le realizzate quindi<strong> è consigliabile pensare sempre come i metodi che scrivete possano reagire alla &#8220;spazzatura&#8221; che potrebbero ricevere in input.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/02/12/php-non-e-fortemente-tipizzato/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

