Detto in parole molto povere il pattern Singleton serve ad avere un oggetto che sia istanziabile una sola volta in tutto il ciclo di vita di un’applicazione e che permetta di recuperarne l’istanza in qualsiasi punto del codice (una sorta di istanza globale anche se in effetti non viene dichiarata global).
Per ottenere questo comportamento occorre creare una classe che abbia un parametro $_istanza statico e non pubblico, il costruttore non pubblico (per evitare che la classe venga istanziata tramite l’operatore new) e un metodo statico e pubblico per recuperare l’istanza.
Ecco il codice, quick & dirty:
<?php
class SingletonSample
{
/** Istanza non pubblica (protected in questo caso) */
static protected $_instance;
/** Costruttore non pubblico (protected in questo caso) */
protected function __construct() {}
/**
* Metodo statico e pubblico per recuperare l'istanza.
* La prima volta che viene chiamato istanzia la classe, mentre le
* volte successive restituisce l'istanza e basta.
*/
static public function getInstance() {
/**
* Essendo un metodo statico, si utilizza self::$prop e self::metodo()
* per accedere alle proprietà e ai metodi
*/
if (null === self::$_instance) {
/** Se non é ancora stata istanziata, istanzia la classe.*/
self::$_instance = new SingletonSample();
}
return self::$_instance;
}
/** Altri metodi specifici della classe */
public function exampleMethod()
{
/**
* In questi metodi è possibile accedere alle proprietà
* e ai metodi usando $this
*/
}
}
?>
In una qualsiasi altra parte del codice è possibile recuperare l’istanza della classe in questo modo:
<?php $istanza = SingletonSample::getInstance(); ?>
E poi utilizzarla normalmente:
<?php $istanza->exampleMethod(); ?>
Diego Malatesta Web Developing php
Mi chiedo cosa lo aggiorni a fare visto che non ci scrivo mai qui, ma vabbè
Diego Malatesta Generic life, tech
Ho appena terminato di aggiornare wordpress alla versione 2.6.2. Enjoy.
Diego Malatesta Generic life, tech
Un amico su freenode mi ha consigliato caldamente di leggere Ubik di Philip K. Dick e così un paio di settimane fa l’ho ordinato assieme a Blade Runner, libro che in italia originariamente era uscito sotto il titolo de “Il Cacciatore di Androidi” (che in inglese ha un titolo decisamente più interessante: “Do Androids Dream of Electric Sheep?”).
Oggi sono andato a ritirali, ma ovviamente era arrivato solo Ubik. Vabè tanto non leggo mai due libri contemporaneamente, l’altro può aspettare.
Vediamo com’è.. ovviamente mi aspetto molto dall’autore che ha ispirato tanti film di successo
Edit:
Effettivamente il libro è molto bello :). Ma non aspettatevi il classico libro di fantascienza perchè non c’entra nulla. Credo che sia la cosa più vicina a farsi di LSD, leggere Ubik, anche se personalmente non ho mai sperimentato la cosa. E’ difficile esprimere pareri su un libro così complesso e particolare. Non vi resta che leggerlo! (tanto è molto breve).
Diego Malatesta Generic life
Ho appena trovato un post interessante su una possibile falla di sicurezza nelle applicazioni che utilizzano database mysql. Quindi oltre che stare attenti all’sql injection, occorre prestare attenzione anche alla validità della lunghezza dei dati.
http://www.suspekt.org/2008/08/18/mysql-and-sql-column-truncation-vulnerabilities/
Qualche mese fa avevo trovato un utile schema per la validazione dei dati che purtroppo non trovo più (ne ho una versione stampata, ma ho perso il link). Se dovessi ritrovarlo metterò l’immagine, ma nel mentre vi dovrete accontentare di una versione testuale ridotta
Controllo presenza dei dati -> controllo dimensione dei dati -> controllo tipo dei dati -> escaping dei dati -> fine.
Diego Malatesta Web Developing coding, life
Oggi, dalle 9.00 alle 16.00 circa, il primo fascio di protoni è stato guidato con successo nel gigantesto acceleratore di particelle del CERN.
Per mia fortuna sono riuscito a seguire tutto l’evento tramite uno stream di una tv francese (mi pare) che ha trasmesso in diretta con tanto di cronaca e interviste per tutta la giornata (fortunatamente in inglese).
Pur non capendoci un’acca, è stata un’esperienza davvero unica poter seguire in diretta un passo così importante per la scienza. Sono rimasto stupito dal numero di italiani in posizioni anche molto importanti che hanno lavorato al progetto.. peccato che viviamo in un paese che sembra fare apposta ad ammazzare la ricerca, senò altro che terzo mondo.. potremmo essere una potenza mondiale.
Qui la news ufficiale dal CERN:
http://press.web.cern.ch/press/PressReleases/Releases2008/PR08.08E.html
Diego Malatesta Generic life, tech
… framework (lo Zend Framework 1.6 e jQuery 1.2.6), per fare un framework ci vuole… vabè avete capito.
Mi sto cimentanto nella creazione di un CMS personale da utilizzare per fare il mio sito/blog in sostituzione di questo. Qualcosa che funzioni, senza troppe pretese di soppiantare wordpress… e che probabilmente finirà nel dimenticatoio tra un paio di giorni.. ma vabè.
Per lo meno ho un pretesto per ascoltarmi i due dischi degli OSI (progetto di Jim Matheos e Kevin Moore, con la collaborazione tral’altro di Steve Wilson, il chitarrista e cantante dei Porcupine Tree) dato che ho scoperto che il mitico Gavin Harrison (attuale batterista dei Porcupine e mia attuale fonte di ispirazione e sapere alla batteria) sostituirà nel terzo album l’altrettato mitico Mike Portnoy.
Primissima impressione per “Free” degli OSI.. noioso.. non mi piace molto (anche se ne ho ascoltato solo un terzo, quindi è un giudizio molto superificiale). Mentre mi prende già di più “Office of Strategic Influence”, il primo album che hanno fatto.
A presto per news sulla vita (o la morte) del CMS e sull’ascolto degli OSI.
Diego Malatesta Web Developing life, php
Ho appena aggiornato con successo wordpress all’ultima versione disponibile.
Diego Malatesta Generic life, tech
Un bel giorno, tornando in treno a casa, ho deciso di creare il Truzzator, uno script in php (inizialmente era in python) che prende del testo in input e ne restituisce una versione in un linguaggio simile a quello dei truzzi.
Il codice sorgente è liberamente scaricabile/modificabile/redistribuibile secondo i termini della licenza GPLv3.
Buon divertimento!
http://truzzator.malol.net
Update: Kyrie ha scritto una bella recensione del Tuzzator, grazie
Diego Malatesta Web Developing coding, life
Th3nu11 apre il suo secondo blog, dove ha deciso di scrivere cose serie (al contrario dell’altro) ed inizia con un ottimo articolo sul routing degli eventi in C# e XAML. Non è decisamente il mio ambiente, ma l’impressione è di un articolo fatto bene, utile ed esaustivo.
Se vi interessa il mondo .NET vi consiglio vivamente di seguirlo.
http://th3nu11.wordpress.com/2008/03/17/routing-eventi/
Diego Malatesta Generic coding, life